STL容器系列文章:list容器

1. 头文件

#include <list>

2. 底层实现

  • 底层双向链表实现,元素之间靠指针维系,第一个元素的prev总为null,最后一个元素的next总为null。

  • list寻址慢,存储地址分散,但插入删除快

3. 对象创建

方法说明
list<int> lst;空列表
list<int> lst(10);10个元素,默认值为0
list<int> lst(10, 5);10个元素,值均为5
list<int> a(10); list<int> b(a);拷贝a创建b
int a[] = {1, 2, 3, 4, 5}; list<int> lst(a, a + 5);拷贝普通数组的所有元素
array<int> a = {1, 2, 3, 4, 5}; list<int> lst(a.begin() + 2, a.end());{3, 4, 5}

4. 常用方法

  • 容量
方法说明
l.size();容器元素个数
l.max_size();能容纳的最大元素个数
l.resize(num);重新设置容器的大小
l.empty();容器是否为空
  • 增删
方法说明
l.push_back();在链表尾添加元素
l.push_front();在链表首添加元素
l.emplace_back();同push_back,效率更高
l.emplace_front();同push_front,效率更高
l.pop_back();获取尾部元素,删除
l.pop_front();获取首部元素,删除
l.insert(iterator it, const T& ele);set中直接插入元素,list需指定位置,迭代器之前插入元素
l.insert(iterator it, int n, const T& ele);插入n个元素
l.insert(iterator it, iterator first, iterator last);插入另一个list的[first, last)
l.erase(iterator it);删除某个迭代器元素
l.erase(iterator first, iterator last);删除[first, last)之间元素
l.remove(value);删除容器中所有等于values的元素
l.remove_if(Predicate pred);删除满足谓词pred的元素
l.unique();容器元素去重,只保留一个
l.unique(BinaryPredicate pred);满足谓词条件的元素去重,只保留一个
l.clear();清空元素
  • 访问
方法说明
l.front();获取首部元素,区别于pop_front()
l.back();获取尾部元素,区别于pop_back()

注:不支持下标访问[]和at()访问!

  • 迭代器:
方法说明
begin()/end()/rbegin()/rend()/cbegin()/cend()迭代器访问
  • 排序和翻转
方法说明
std::sort(l.begin(), l.end());系统函数。默认升序,也可自定义比较函数实现降序
std::reverse(l.begin(), l.end());系统函数。列表翻转
  • 其他函数:
方法说明
l.assign(int n, const T& ele);用n个ele赋值
l1.swap(l2); swap(l1, l2);交换两个同类型容器的所有元素
l1.merge(l2);合并两个列表元素,默认合并后升序排列
l1.splice(iterator it, list& l2);在任意位置拼接入另一个list

参考文章:
https://www.cnblogs.com/linuxAndMcu/p/10260627.html(实例,推荐)
http://c.biancheng.net/view/6892.html(定义)
https://www.cnblogs.com/linuxAndMcu/p/10260627.html
https://blog.csdn.net/lskyne/article/details/10418823

created by shuaixio, 2021.06.15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值