目录
一、list容器的底层结构
1.list容器是一个可以在任意位置插入和删除的序列容器,并且可以双向迭代
2.list容器的底层是一个带头双向链表,双向链表的每个结点独立存储在一个空间,每个结点有指向前一个结点和后一个结点的指针。
3.与其他容器相比,list可以在任意结点插入和删除元素的效率很高,因为链表不是连续的存储空间。
4.同时他也不支持随机访问数据,所以当频繁访问数据时,list不适合用作容器。
二、list的使用
1.list容器的构造
(1)list (size_type n, const value_type& val = value_type()) 构造的 list 中包含 n 个值为 val 的元素(2)list() 构造空的 list(3)list (const list& x) 拷贝构造函数(4)list (InputIterator first, InputIterator last) 用[first, last) 区间中的元素构造 list

2.list的访问和迭代器的使用
1.访问list容器的元素,C++ 提供了几种
back();访问尾部元素
front();访问首元素
2.当我们要遍历时,可以通过迭代器来实现,下面是正向迭代
3.范围for也可以访问,他的底层也是迭代器的封装
4.当然我们把迭代器反过来读取,也就是可以用反向迭代器来访问。和正向迭代器一样
3.1list容器的基本操作
1.push_back();//尾插,从后面插入数据
2.push_front();//头插
3.pop_back();//尾删
4.pop_front();//头删
5.insert();//插入
:insert(iterator position, const value_type& val)在某个位置插入一个值,有返回值
:insert(iterator position, size_type n, const value_type& val)在某个位置插入n个值,无返回值
:insert(pos,it.begin(),it.end())从某个位置开始,区间赋值
6.erase();//删除数据,erase时存在迭代器失效问题,原因是删除数据时,指针原来指向的位置已经被释放,对原指针再进行操作,就会报错。解决方法:更新指针
:erase(iterator position)删除某个位置的值
:erase(it.begin(),it.end()) 删除某个区间的值
7.clear();//全部删除
8.swap();//交换容器里的值
9.resize();//重新分配容器容量,新的比原来的小就分割,比原来的大就填充空的
10.assign();//向容器中添加一段元素
3.2 list capcity
1.empty();//判断是否为空
2.size();//返回容器大小
三、list和vector对比
我们在实际应用时,根据自己所需选择适合的容器