前言
学完 vector 之后,再看 list 会很直观:它也是 STL 里的序列容器,但底层换成了双向循环链表。这个变化直接决定了它的强项和短板。中间插入、删除很顺手,随机访问就别指望了。
一、list 的介绍和使用
1.1 list 的基本概念
list 底层通常可以理解成带头结点的双向循环链表。节点不要求连续存储,所以它在频繁插入、删除时更有优势;代价是不能像 vector 那样通过下标直接定位元素。
1.2 常用接口
构造
list 支持默认构造、拷贝构造、区间构造,以及 C++11 的列表初始化。
list<int> l1; // 空列表
list<int> l2(4, 100); // 4 个 100
list<int> l3(l2.begin(), l2.end()); // 区间构造
list<int> l4{1, 2, 3}; // 列表初始化
迭代器
list 同样提供正向和反向迭代器。rbegin() 返回的是 reverse_iterator,它从最后一个元素开始;rend() 则对应第一个元素之前的位置。
auto it = l.begin();
while(it != l.end()){
cout << *it << " ";
++it;
}
增删改查
list 支持头尾插入和删除,这一点和 deque 有点像,但它真正的价值还是体现在中间节点的插入、删除上。
L.push_back();
L.();
L.();
L.();

