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

前言

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

7.5:stack容器

7.5.1:stack容器基本概念

C++基础(13)——STL(stack、queue、list)_第1张图片

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

C++基础(13)——STL(stack、queue、list)_第2张图片

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

C++基础(13)——STL(stack、queue、list)_第3张图片

7.6:queue容器

7.6.1:queue的基本概念

C++基础(13)——STL(stack、queue、list)_第4张图片

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

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

C++基础(13)——STL(stack、queue、list)_第5张图片

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

C++基础(13)——STL(stack、queue、list)_第6张图片

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

7.7.1:list基本概念

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

链表优缺点

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

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

C++基础(13)——STL(stack、queue、list)_第7张图片

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

C++基础(13)——STL(stack、queue、list)_第8张图片

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

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

C++基础(13)——STL(stack、queue、list)_第9张图片

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

C++基础(13)——STL(stack、queue、list)_第10张图片

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

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

 C++基础(13)——STL(stack、queue、list)_第11张图片

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

 C++基础(13)——STL(stack、queue、list)_第12张图片

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

 C++基础(13)——STL(stack、queue、list)_第13张图片

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

C++基础(13)——STL(stack、queue、list)_第14张图片

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

C++基础(13)——STL(stack、queue、list)_第15张图片

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

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

C++基础(13)——STL(stack、queue、list)_第16张图片

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

C++基础(13)——STL(stack、queue、list)_第17张图片

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

C++基础(13)——STL(stack、queue、list)_第18张图片

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

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

 C++基础(13)——STL(stack、queue、list)_第19张图片

 C++基础(13)——STL(stack、queue、list)_第20张图片

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

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

C++基础(13)——STL(stack、queue、list)_第21张图片

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

C++基础(13)——STL(stack、queue、list)_第22张图片

总结

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

你可能感兴趣的:(C++学习,c++,开发语言)