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

前言

本文主要介绍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是降序排列,要写一个回调函数

总结

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门牙会稍息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值