当前位置:网站首页>[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
边栏推荐
猜你喜欢
postgresql窗口功能
Flexible and easy-to-use sql monitoring script part7
Laravel文档阅读笔记-Rendering JSON(对JS变量进行赋值)
【机器学习】支持向量机(SVM)代码练习
种子数据报错:liquibase.exception.ValidationFailedException: Validation Failed
RestFul,会话技术,Fiddler
灵活好用的sql monitoring 脚本 part7
74HC595 chip pin description
(五)、马尔科夫预测模型
Important news丨.NET Core 3.1 will end support on December 13 this year
随机推荐
yolov5 detects the number of labels in the dataset
unity第一课
C语言:调整奇数偶数顺序
Kotlin Coroutines - Exception Handling
yolov5检测数据集标签数量
低成本、大容量、高交互…Polkadot 引领 GameFi 实现新突破
Laravel文档阅读笔记-Rendering JSON(对JS变量进行赋值)
postgresql Window Functions
MVN 中配置flyway mysq
SiamFC:用于目标跟踪的全卷积孪生网络 fully-convolutional siamese networks for object tracking
Apache POI
Colors that Tkinter can choose from
Anaconda 更换默认虚拟环境
es6 基础知识详解 变量 字符串 解构赋值 函数 对象 从入门到精通
Forest Program dfs+tanjar仙人掌
Difference Constraint - Graph Theory
MUI无法滚动?完美解决
The maximum validity period of an SSL certificate is 13 months. Is it necessary to apply for multiple years at a time?
Codeforces Round #359 (Div. 2) C. Robbers' watch Violent Enumeration
MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP