前言
本文主要介绍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-。如果重载了,那么就支持随机访问,不支持随机访问迭代器的容器不能使用标准算法。