C++笔记——第六篇 list的简介和使用
创始人
2025-05-31 23:14:05
0

目录

一、list的介绍和使用

1. list的介绍

2. list的使用 

2.1 list的构造

 2.2 list iterator的使用

2.3 list capacity

2.4 list element access

2.5 list modifiers

2.6 list的迭代器失效

二、list与vector的对比




一、list的介绍和使用



1. list的介绍


1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代


2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。


3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。


4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。


5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)


2. list的使用 


2.1 list的构造

构造函数( (constructor)) 接口说明
list() ——构造空的list


list (size_type n, const value_type& val = value_type()) —— 构造的list中包含n个值为val的元素


list (const list& x)  —— 拷贝构造函数


list (InputIterator first, InputIterator last) —— 用[first, last)区间中的元素构造list

 2.2 list iterator的使用

函数声明 ——接口说明
begin +end——返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器


rbegin +rend——返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置

 1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
 2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动

2.3 list capacity

函数声明—— 接口说明
empty ——检测list是否为空,是返回true,否则返回false
size ——返回list中有效节点的个数 

2.4 list element access

函数声明 —— 接口说明
front —— 返回list的第一个节点中值的引用
back —— 返回list的最后一个节点中值的引用

2.5 list modifiers

函数声明 —— 接口说明
push_front —— 在list首元素前插入值为val的元素
pop_front —— 删除list中第一个元素
push_back —— 在list尾部插入值为val的元素
pop_back —— 删除list中最后一个元素
insert —— 在list position 位置中插入值为val的元素
erase —— 删除list position位置的元素
swap —— 交换两个list中的元素
clear —— 清空list中的有效元素

2.6 list的迭代器失效

大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

 

 



二、list与vector的对比



vector的底层是动态顺序表,也就是一段连续的内存空间,所以能够支持随机访问,因此适合用来进行排序。但是其插入数据会造成扩容,并且删除元素会造成元素的移动,所以不适合频繁插入、删除的场景。

list的内存空间是可以不连续的双向链表,由于空间不连续所以不支持随机访问,但是其插入和删除操作效率很高,适合频繁插入、删除的场景。

vector在扩容和删除元素时会造成迭代器失效的问题,而list在删除时会造成迭代器失效的问题。



 

 (图片来源于网络)

相关内容

热门资讯

AI大牛股,停牌核查!多只A股... 近期,随着市场波动的加大,提示交易风险的公司也逐渐多了起来。1月14日晚间,易点天下公告,公司将就股...
中信证券业绩快报:归母净利润创... 1月14日晚,中信证券发布了2025年的业绩快报。数据显示,中信证券实现营业收入748.3亿元,同比...
国产存储“双子星”浮现:兆易创... 1月13日,国产存储芯片龙头兆易创新成功登陆香港交易所主板。上市首日,其股价报收222.8港元,较发...
瑞尔竞达二次闯关北交所IPO成... 1月14日,北京证券交易所(简称“北交所”)上市委员会(简称“上市委”)今年第3次审议会议结果出炉,...
易点天下:公司目前不涉及GEO... 新京报贝壳财经讯 1月14日,易点天下公告,公司目前不涉及GEO业务,敬请广大投资者注意二级市场交易...
特朗普最新表态!丹麦军方开始向... 每经编辑:黄胜 央视新闻据丹麦方面14日消息,丹麦军方已开始向格陵兰岛运送军事物资并派出先遣分队,为...
寿司郎赢得毫不费力 订阅 快刀财经 ▲ 做您的私人商学院平价寿司不平价,回转寿司不回转。作者:罗雪妍来源:远川研究所(I...
港交所对星悦康旅及中国奥园作出... 1月13日,香港联合交易所有限公司对星悦康旅股份有限公司(更名前:奥园健康生活集团有限公司,股份代号...
曾经的光伏组件行业“第一股”陷... 2026.01.14本文字数:2179,阅读时长大约4分钟作者 |第一财经 魏中原1月13日晚,曾经...
中胤时尚:因募集资金管理违规,... 1月14日,中胤时尚(300901.SZ)发布公告称,近日收到中国证券监督管理委员会浙江监管局(以下...