STL-deque双向队列 & list链表 的用法

上期回顾/这期的大饼

        上期我们学了迭代器的用法,和关于vector的练习题(没看过的可以点这——>上期链接

        这期我们将学习deque双向队列 和 list链表 的用法。

什么是deque

        deque:也是顺序容器的一种,也是一个可变长数组。如果需要用deque,需要包含头文件 deque。所有适用于vector的操作都适用于deque,deque在头尾增删元素性能较好

1.deque的特点
  • deque 和 vector 有很多类似的地方。在 deque 中,随机存取任何元素都能在常熟时间内完成(但慢于 vector )。
  • 它相当于 vector 的优点是,vector 在头部删除或添加元素的速度很慢。在尾部添加元素的性能好,而 deque 在头部增删元素都具有较好的性能(大多数情况下都能在常数时间内完成)。

2.deque有两种 vector 没有的成员函数
  • void push_front(const T&val);//将val插入容器的头部
  • void pop_front();//删除容器头部的元素

3.deque使用注意
  • deque支持随机存储
  • deque支持在头部和尾部存储数据
  • deque不支持capacity和reserve操作

deque的用法与vector差不多,所以作者在这并不过多叙述。

deque的用法与vector差不多,所以作者在这并不过多叙述。

deque的用法与vector差不多,所以作者在这并不过多叙述。

deque的用法与vector差不多,所以作者在这并不过多叙述。

deque的用法与vector差不多,所以作者在这并不过多叙述。

deque的用法与vector差不多,所以作者在这并不过多叙述。

什么是list

        list-链表介绍

        

在C++中,list是一种双向链表的容器。它可以存储各种类型的元素,并且支持在任意位置进行插入和删除操作,而不需要移动其他元素。list中的元素按照它们在容器中的顺序排列,并且可以通过迭代器来访问。

以下是一些list的特点和功能:

1. 双向链表:list是由一个个节点组成的双向链表,每个节点包含一个元素和对前后节点的引用。

2. 动态大小:list在运行时可以动态增长或缩小,不需要事先指定容器的大小。

3. 插入和删除:list支持在任意位置插入和删除元素。插入和删除操作的时间复杂度是O(1)。

4. 迭代器:list提供了迭代器来遍历容器中的元素。迭代器可以向前或向后遍历,可以通过迭代器进行插入和删除操作。

5. 没有随机访问:由于list是一个链表,所以不能像数组或向量那样通过索引来直接访问元素。要访问list中的元素,需要使用迭代器进行遍历。

以下是一些常用的list操作和方法:

1. 插入操作:使用insert()函数在指定位置插入一个元素,使用push_back()函数在末尾插入一个元素,使用push_front()函数在头部插入一个元素。

2. 删除操作:使用erase()函数删除指定位置的元素,使用pop_back()函数删除末尾元素,使用pop_front()函数删除头部元素。

3. 访问元素:使用迭代器来遍历list中的元素。begin()函数返回一个指向第一个元素的迭代器,end()函数返回一个尾后迭代器。

4. 大小操作:使用size()函数获取list中元素的个数。

5. 其他操作:list还提供了排序、合并、反转等操作,可以使用sort()、merge()和reverse()等函数来实现。

以下是一些常用的list操作和方法:

  1. 插入操作:使用insert()函数在指定位置插入一个元素,使用push_back()函数在末尾插入一个元素,使用push_front()函数在头部插入一个元素。

  2. 删除操作:使用erase()函数删除指定位置的元素,使用pop_back()函数删除末尾元素,使用pop_front()函数删除头部元素。

  3. 访问元素:使用迭代器来遍历list中的元素。begin()函数返回一个指向第一个元素的迭代器,end()函数返回一个尾后迭代器。

  4. 大小操作:使用size()函数获取list中元素的个数。

  5. 其他操作:list还提供了排序、合并、反转等操作,可以使用sort()、merge()和reverse()等函数来实现。

总之,list是一个灵活的容器,适用于需要频繁插入和删除元素的场景。它的操作复杂度比较低,但由于链表结构的特性,访问元素的效率较低。

        顺序存储的优缺点分析

       

        优点:
  1. 无需为表示节点间的逻辑关系而增加额外的存储空间
  2. 可方便地随机存储表中的任一元素。

        缺点: 
  1. 插入或删除平均需要移动一半的节点
  2. 顺序表要求占用连续的存储空间,比如数组:定义时需要确定数组大小,可能造成空间不足或者浪费

 

 list:

        是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中(可以连续),并且由指针将有序的元素链接起来。

特点:
  • list随机检索的性能非常的不好,因为它不像 vector 那样直接找到元素的地址,而是要从头一个一个的顺序查找
  • 但是它可以迅速地在任何节点进行插入和删除操作,因为 list  的每一个节点保存着它在链表中的位置,插入或删除一个元素仅对最多三个元素有所影响
  • list 支持双向迭代器,没有下标,必须使用迭代器遍历 list 。(由于不支持随机迭代器,不能写迭代器+x,迭代器-x,不能用sort()函数,但 list 拥有 sort 成员函数

list相关函数
list相关函数
函数名函数说明
push_back(元素)往链表尾部添加元素
push_front(元素)往链表头部添加元素
pop_back(元素)链表尾部移除元素
pop_front(元素)链表头部移除元素
insert()在指定位置插入一个或多个元素
begin()获取链表的起始地址
end()获取链表的结束地址
size()返回链表元素个数
max_size()获取链表支持的最大容量
erase(开始地址,结束地址)删除链表中指定范围的元素
remove(值val)删除和 val 相等的元素
clear()清空链表
empty()判断链表是否为空
reverse(开始地址,结束地址)翻转链表所有值
sort(链表对象)链表元素排序

注:STL 中的算法 sort 可以用来对 vector 和 deque 排序,它需要随机访问器的支持。因为 list 不支持随机访问迭代器,所以不能用算法 sort 对 list 容器排序。因此, list 容器引入了 sort 成员函数以完成排序。

 

!!!

!!!

!!!

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值