STL之List
相对于vector的连续线性空间,list就显得复杂许多,与向量(vector)相比, 它允许快速的插入和删除,且每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。

list不仅是一个双向链表,而且还是一个环状双向链表。所以它只需要一个指针,便可以完整实现整个链表。由于list是一个双向链表(double linked-list),迭代器必须具备前移、后移的能力,所以list提供的是Bidirectional Iterators。
插入操作(insert)和合并操作(splice)都不会造成原有的list迭代器失效。这在vector是不成立的,因为vector的插入操作可能造成记忆体重新配置,导致原有的迭代器全部失效。甚至list的元素删除操作(erase)也只有“指向被删除元素”的那个迭代器失效,其他迭代器不受任何影响。
List与Array,Vector,Deque的区别

构造函数与析构函数

非修改性操作

想要访问list的所有元素,必须使用range-based for循环、特定的操作函数或者迭代器。list不支持随机访问,只有front()和back()能够直接访问元素。

赋值操作

迭代器相关函数
只有运用迭代器,才能够访问list中的各个元素。由于List不能随机访问,这些迭代器只是双向(而非随机)迭代器。所以凡是用到随机访问迭代器的算法(所有用来操作元素顺序的算法——特别是排序算法——都归此类)你都不能调用他们来处理list,不过你可以拿list的特殊成员函数sort()取而代之。

元素的插入与删除
List 提供deque的所有功能,还增加了适用于list的remove和remove_if算法的特殊版本。这些成员函数比remove算法的速度更快。



接合函数


异常处理

实例