当前位置:网站首页>[STL]list
[STL]list
2022-08-09 07:48:00 【Protein_zmm】
list文档介绍
- list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
- list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
- list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
- 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
- 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)
总结:list是一个双向带头循环链表
list的基本使用
list的创建和遍历
void test_list1()
{
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4); // 尾插
// 迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{
cout << *it << " ";
++it;
}
cout << endl;
// 范围for遍历
for (auto e : lt)
{
cout << e << " ";
}
cout << endl;
list<int>::reverse_iterator rit = lt.rbegin();
while (rit != lt.rend())
{
cout << *rit << "";
++rit;
}
}
基本的增删查改
链表排序
void test_list2()
{
list<int> lt;
lt.push_back(1);
lt.push_back(4);
lt.push_back(3);
lt.push_back(2);
// 排序 —— 不能使用sort,因为这个是双向迭代器
// sort要求是随机迭代器
lt.sort(); // 必须使用list中的sort
// 如果大量数据存储,不要用sort,用vector不然排序效率太低
list<int>::iterator it = lt.begin();
while (it != lt.end())
{
cout << *it << " ";
++it;
}
cout << endl;
}
去重与逆置
void test_list3()
{
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.reverse(); // 逆置
for (auto e : lt)
{
cout << e << " ";
}
cout << endl;
lt.push_back(4);
lt.push_back(4);
lt.push_back(4);
lt.sort();
lt.unique(); // 去重——前提要先排序
for (auto e : lt)
{
cout << e << " ";
}
cout << endl;
}
补充
erase给一个下标位置删除
remove给一个值,找到这个值去删除
splice——接合,可以将结点一起转移,把链表2开始的区间转到链表1
边栏推荐
猜你喜欢
基于布朗运动的文本生成方法-LANGUAGE MODELING VIA STOCHASTIC PROCESSES
【模板】树链剖分 P3384
IDEA文件UTF-8格式控制台输出中文乱码
PyTorch中 torch.nn与torch.nn.functional的区别
毕业我选择了保家卫国,退伍我选择了华为外包
Win10桌面图标排列混乱
【报错】Root Cause com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
(三)、时间序列预测
Important news丨.NET Core 3.1 will end support on December 13 this year
JS基础1
随机推荐
SAP ALV data export many of the bugs
训练好的深度学习模型,多种部署方式
【机器学习】降维代码练习
SAP ALV 数据导出被截断的bug
环形链表问题(判环、求入口点)
4.MySQL更新和删除数据
【nuxt】服务器部署步骤
Data storage implementation of SDRAM and read and write operations on its data
C语言:汽水瓶详解
Colors that Tkinter can choose from
入门cv必读的10篇baseline论文
Win10桌面图标排列混乱
C语言:调整奇数偶数顺序
SSL证书最长有效期13个月,还有必要一次申请多年吗?
学习小笔记---机器学习
SSM整合开发案例
Change Jupyter Notebook default open directory
【机器学习】支持向量机(SVM)代码练习
HDU - 3183 A Magic Lamp Segment Tree
MVN 中配置flyway mysq