【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
温馨提示:这篇文章已超过384天没有更新,请注意相关的内容是否还可用!
💓博主CSDN主页:杭电码农-NEO💓
⏩专栏分类:C++从入门到精通⏪
🚚代码仓库:NEO的学习日记🚚
🌹关注我🫵带你学习C++
🔝🔝
链表list
- 1. 前言
- 2. list的使用
- 2.1 list的构造函数
- 2.2 list迭代器的使用
- 2.3 list容量相关操作
- 2.4 list的增删查改
- 3. list迭代器失效问题探讨
- 4. 算法库函数和list的关系
- 4.1 算法库函数的迭代器类型
- 4.2 list不能使用的算法库函数
- 5. 总结以及拓展
1. 前言
本质重点:
本章重点讲解list的接口函数的熟悉
并且讲解list迭代器失效的特性
最后讲解迭代器的功能分类以及
算法库函数中谁能用谁不能用
STL标准库中的list是一个
带头双向循环链表
和vector不同,list没有支持[ ]访问
以及resize和reserve容量相关的函数
这是因为list不能随机访问数据
并且list的迭代器的底层明显不是指针了
那它的底层到底是啥?
list会和vector一样有迭代器失效问题吗?
带着这些疑问,我们来进入今天的学习分享
2. list的使用
我们还是在网站:cplusplus中查询字典
和vector一样,list也有两个模板参数
但是第二个模板参数是和内存效率相关的
所以现在的学习暂时不用管它(它有缺省值)
list的使用分为以下几个阶段进行:
- list的构造,析构,拷贝构造函数
- list迭代器的使用
- list容量相关的操作
- list的增删查改
2.1 list的构造函数
list的构造函数:
第一个是无参构造,直接跳过
第二个是用n个val初始化list对象
第三个是用一段迭代器区间构造
第四个是用一个初始值构造
看起来平平无奇,来实操一下:
list l1;//无参构造 list l2(10,5);//用10个5初始化链表 vector vv{1,2,3,4,5,6}; list l3(vv.begin(),vv.end());//用迭代器区间初始化 list l4('a');//用一个字符来初始化list的拷贝构造和析构函数在使用
list时不会显示调用,所以将它们忽略掉
2.2 list迭代器的使用
虽然list的迭代器底层不是指针
但是可以把它理解为指针来使用
这四个函数都是老朋友了,不多介绍了
唯一值得注意的是下图:
begin和rend的指向相同
end和rbegin的指向相同
迭代器遍历链表:
vector vv{1,3,5,7,9,11,13,15}; list l(vv.begin(),vv.end()); auto it = l.begin(); while(it!=l.end()) { cout 1,3,5,7,9,11,13,15}; list cout 1,5,10,15,20,100,120}; list1,2,3,4,5,6,7,8}; auto it=ll.begin(); while(it!=ll.end()) { if((*it)%2==0) { it=erase(it); } else { it++; } }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!





