list的介绍与使用

1.list 简单介绍

  1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
  2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
  3. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2.list的使用

2.1list的构造函数

list (size_type n, const value_type& val = value_type())  
构造的list中包含n个值为val的元素
list() 构造空的list
list (const list& x) 拷贝构造函数
list (InputIterator first, InputIterator last)[first, last)区间中的元素构造list

代码实践

list<int> l1(5,6);size为5,元素为6的list。
list<int> l2;
list<int> l3(l1);拷贝构造
list<int> l4(l1.begin(),l1.end());
一定要传迭代器的区间!如果前后两个迭代器是同一个迭代器,将无法被初始化

2.2 list 容量查看

empty() 检测list是否为空,是返回true,否则返回false.
size() 返回list中有效节点的个数.

代码实践

list<char> l1;
bool truth = l1.empty();
size_t sz = l1.size();

2.3 list 元素访问

front 返回list的第一个节点中值的引用。
back  返回list的最后一节点中值的引用。

代码实践

list<int> l1 = {1,2,3,4,5};
cout<<l1.front()<<" "<<l1.back()<<endl;
结果为1 5

2.4 list 增删查改

push_front  在list首元素前插入值为val的元素
pop_front   删除list中第一个元素
push_back   在list尾部插入值为val的元素
pop_back  删除list中最后一个元素
insert      在list position 位置中插入值为val的元素
erase       删除list position位置的元素
swap        交换两个list中的元素
clear       清空list中的有效元素

代码实践

list<int> l1 = { 1,2,3,4,5 };
无需迭代器:
l1.push_front(1);
l1.pop_front();
l1.push_back(6);
l1.pop_back();
需要迭代器:
l1.insert(l1.begin(),2);
l1.erase(l1.begin());

重点:不可以传l1.end(), l1.erase(l1.end())是不被允许的
因为li.end()对应的迭代器并不是list的最后一个元素。

需要两个迭代器:
list<int> l1;
list<int> l2;
l1.swap(l2);

l1.clear().清除所有节点

2.5 list迭代器

在这里插入图片描述

list的底层结构为带头结点的双向循环链表。
begin是 头节点的下一个节点。
end是头节点。
begin++ 是向后移
rbegin 和rend 与 begin和end 是相反的关系。
rbegin++ 是向前移。

带c是指 const

2.6 list的迭代器失效

因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的是指向被删除节点的迭代器,其他迭代器不会受到影响.

如何避免:在使用迭代器之前,将迭代器进行更新!

3. list与vector的对比

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值