STL之list
- 头文件及声明
1
2
3
4
5
6
namespace std
{
template <typename T, typename Allocator = allocator<T>>
class list;
}
- 内部结构及其特性
list内部使用的是循环双链表,有一个被称为锚点(anchors),分别链接头尾节点。
链表并不支持随机存取,所以读写任意一个元素较慢,除了两端的元素;插入和删除很快,几乎是常数时间内完成;插入和删除并不会让指针,引用,迭代器失效;
对于移除元素,list提供了自己的成员函数,remove和remove_if,如移除所有的val,coll.remove(val)
,remove_if(op)接受一个函数或函数对象或lambda表达式来移除使op产生true的值。
list提供了一系列自己特有的函数,列举如下:
c.unique()
,c.unique(op)
去掉重复的元素c.splice(pos, c2)
,c.splice(pos, c2, c2pos)
,c.splice(pos, c2, c2beg, c2end)
这些都是将c2中的值移动到c1的pos之前,注意是移动,c2移动后就没有了。c.sort()
,c.sort(op)
排序,前者用<,后者用op。c.merge(c2)
,c.merge(c2, op)
将c2合并到c中,并且会排序。c.reverse()
反转list。