C++ STL list容器使用教程

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 容器

不支持索引遍历

  1. for rang遍历
list<int> lis({3,2, 4});
for(int x : lis) {
    cout<< x<<endl;
}
  1. 迭代器遍历
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()从列表中删除所有连续的重复元素

删除元素

  1. l.erase(l.begin()) 删除 l 的 首部元素
  2. l.erase(l.begin(), l.end()) 删除 l 首部到末尾的元素
list<int> l = {1, 2, 3, 4, 5};
l.erase(l.begin(), l.end());

插入元素

  1. lis.insert(lis.end(), value) 在 lis 末尾插入 value
  2. lis.insert(lis.end(), num, value) 在 lis 末尾插入 num 个 value
  3. l1.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());

合并列表

  1. l2.merge(l1) 将l1合并到l2,并按照升序排列
  2. 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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值