C++基础(13)——STL(stack、queue、list)

news/2025/2/11 2:20:36/

前言

本文主要介绍C++中STL中的stack、queue和list容器

7.5:stack容器

7.5.1:stack容器基本概念

栈中只有顶端元素才可以被外界调用,因此栈不允许有遍历的行为,其中string、vector、deque都可以遍历

7.5.2:栈的常用接口(push、pop、top、empty、size、operator=)

7.6:queue容器

7.6.1:queue的基本概念

队列中队头出数据,队尾进数据,且和栈一样不允许有遍历操作

7.6.2:queue的常用接口(push、pop、front、back、size、empty)

queue容器装入自定义数据类型数据

7.7:list容器(双向循环链表)

7.7.1:list基本概念

链表由一系列的结点组成,结点是由数据域和指针域所组成。

链表优缺点

优点:可以对任意位置数据进行插入或删除

缺点:访问速度较慢、占用更大的空间

STL中的list是一个双向循环链表,list的迭代器是双向迭代器,不能跳跃式访问

相对于vector,经过插入或删除操作list原有的迭代器都不会失效,而vector的迭代器可能会失效。因为当vector容器插入数据量过大,那么系统会重新给vector分配空间,这时原有数据保存的位置都会发生改变,原有迭代器就会失效。删除也同理。

7.7.2:list的构造函数(无参构造、拷贝、区间、指定多个相同数据)

7.7.3:list的赋值和交换(operator=、assign、swap)

7.7.4:list大小操作(size、empty、resize)

在使用resize的时候出现了一点问题,使用resize进行缩小的时候会报错,正常将list放大不会报错

 

这时我想用resize进行缩小一下,让链表的长度变为2,这时会报错

 

我看了看resize的原型,一个参数的版本是灰色的,被注释掉了

 

在类中给构造函数指定默认参数就可以解决,编译可以通过,可以正常打印

不指定默认参数可也可以,制定一个对象就好了,本质还是调用了两个参数的resize方法

7.7.5:list插入和删除(push_back、push_front、pop_back、pop_front、insert、clear、erase、remove)

在使用remove的时候又遇到了一些问题,说是无法比较两个对象,其实就是要对==进行运算符重载

 在Person类中对==进行运算符重载

使用remove删除符合的全部对象

7.7.6:list容器数据存取(front、back)

判断一个容器的叠加器是否支持随机访问,可以验证叠加其是否重载了operator+或者operator-。如果重载了,那么就支持随机访问,不支持随机访问迭代器的容器不能使用标准算法。

 

 

7.7.7:list容器元素翻转和排序(reverse、sort)

要对Person类的<运算符进行重载才可以正常编译,默认使用的sort是升序

想要让list是降序排列,要写一个回调函数

总结

以上就是本文的全部内容,非常感谢你能看到这


http://www.ppmy.cn/news/496423.html

相关文章

JAVA NIO创建服务端(含代码详解)

目录 整体代码 代码详解 注意事项 非阻塞模式&#xff1a; Selector的正确使用&#xff1a; 适当的缓冲区管理&#xff1a; 事件处理的错误处理&#xff1a; 性能优化&#xff1a; 进程退出和资源释放&#xff1a; 当使用Java NIO&#xff08;New I/O&#xff09;创建…

redis存中文显示“\xe2\xe5\xb0\x8f\xe5\x87\xa1\x80\x9c\xe2\x80\x9d“解决方案

解决方案 启动时加–row ./redis-cli --raw127.0.0.1:6379> set xiaofan "小凡" OK 127.0.0.1:6379> get xiaofan 小凡

XXE-什么是XXE

简单来说&#xff0c;XXE就是XML外部实体注入。 当允许引用外部实体时&#xff0c;通过构造恶意内容&#xff0c; 就可能导致任意文件读取、系统命令执行、 内网端口探测、攻击内网网站等危害。 XML XML用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、…

C++Builder XE2 lite精简版

听说XE8要出了&#xff0c;我这刚从CB6转型到2010不久的&#xff0c;也是眼馋。奈何XE7太大了&#xff0c;平时也只是学习琢磨点小东西&#xff0c;网上找的2010、2011&#xff08;XE1&#xff09;的精简版用着挺好&#xff0c;就是感觉不那么稳定。这两天闲着没事做了一个CBui…

Python问题:SyntaxError: Non-ASCII character '\xe2'

Python问题&#xff1a;SyntaxError: Non-ASCII character ‘\xe2’ in file 在python中出现该问题是因为文件格式编码出现了问题&#xff0c;具体原因和解决方法如下&#xff1a; 原因分析“SyntaxError: Non-ASCII character ‘\xe2’ in file”翻译为中文的意思是&#xf…

delphi(XE2)实现图片异形窗体,支持摆放控件

网上有较多使用UpdateLayeredWindow函数实现美化的图片异形窗体的代码&#xff0c;一般使用此场景时&#xff0c;对软件界面要求较高。但是实现了图片窗体后&#xff0c;在窗体中摆放不了其他控件&#xff0c;导致这个功能很鸡肋。为解决此问题&#xff0c;本博文中的案例使用两…

XXE漏洞

XXE漏洞 1.漏洞简介 ​ XXE 漏洞全称XML External Entity Injection&#xff0c;即 XML 外部实体注入漏洞&#xff0c;XXE 漏洞发生在应用程序解析 XML 输入时&#xff0c;没有禁止外部实体的加载&#xff0c;导致可加载恶意外部文件&#xff0c;造成文件读取、命令执行、内网…

Delphi XE2控件安装方法

1) 首先打开所需要安装控件的安装文件&#xff0c;点击open project... (有些非可视的老控件直接打开DPK文件即可) 2) 以安装DCPcrypt为例&#xff0c;打开控件工程后&#xff0c;在project manager中如下图所示。 3) 如图所示打开工程处单击鼠标右键&#xff0c;点击"INS…