list
翻译为列表,列表容器被实现为双向链表,因此它提供了对其数据的双向顺序访问。
List
不提供快速随机访问,它只支持双向顺序访问。 List
允许在恒定时间内在序列中的任何位置进行插入和删除操作。
零大小的列表也是有效的。 在这种情况下 list.begin()
和 list.end()
指向相同的位置。 但是调用 front()
或 back()
的行为是未定义的。
引用头文件
#include <list>
初始化赋值
list<int> lis; // 初始化空列表
list<int> lis(5); // 初始化列表 5 个元素
list<int> lis(3,2); // 列表 初始化 3个2 : 2 2 2
list<int> lis( {3,2, 4} ); // 初始化 3 2 4
list<int> lis = {1, 2, 3}; // 初始化 1 2 3
list<int> lis1(lis); // 初始化为 lis 中元素
list<int> lis1 = {lis.begin(), lis.end()}; // 初始化为 lis 中元素
遍历 list 容器
不支持索引遍历
for rang
遍历
list<int> lis({3,2, 4});
for(int x : lis) {
cout<< x<<endl;
}
- 迭代器遍历
list<int> lis({3,2, 4});
for(auto it = lis.begin(); it != lis.end(); it++) {
cout<<*it <<endl;
}
迭代器
list
容器,迭代器只支持 ++
--
操作
list 常用方法
方法 | 说明 |
---|---|
back() | 返回对列表最后一个元素 |
begin() | 返回一个随机访问迭代器,它指向列表的第一个元素 |
end() | 返回一个随机访问迭代器,它指向列表的最后一个元素 |
empty() | 测试列表是否为空 |
erase(value) | 从列表中删除单个元素 |
front() | 返回列表第一个元素 |
insert(value) | 通过在容器中插入新元素来扩展列表 |
merge(duq1) | 将两个排序列表合并为一个 |
size() | 返回双端队列中存在的元素总数 |
pop_back() | 从列表中删除最后一个元素 |
pop_front() | 从列表中删除第一个元素 |
push_back() | 在列表末尾插入新元素 |
push_front() | 在列表首部插入新元素 |
sort() | 自带对列表的元素进行排序的功能 |
unique() | 从列表中删除所有连续的重复元素 |
删除元素
l.erase(l.begin())
删除 l 的 首部元素l.erase(l.begin(), l.end())
删除 l 首部到末尾的元素
list<int> l = {1, 2, 3, 4, 5};
l.erase(l.begin(), l.end());
插入元素
lis.insert(lis.end(), value)
在 lis 末尾插入 valuelis.insert(lis.end(), num, value)
在 lis 末尾插入 num 个 valuel1.insert(l1.begin(), l2.begin(), l2.end());
在 l1 的首部 插入 l2 全部元素
list<int> l1 = {3, 4, 5};
list<int> l2 = {1, 2};
l1.insert(l1.begin(), l2.begin(), l2.end());
合并列表
l2.merge(l1)
将l1合并到l2,并按照升序排列l2.merge(l1, cmp_fun)
将l1合并到l2,根据 cmp_fun 排列
bool cmp_fun(int a, int b) {
return a > b;
}
list<int> l1 = {31, 11, 5, 1};
list<int> l2 = {30, 20, 10};
l2.merge(l1, cmp_fun);