STL之List

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

屏幕快照 2017-04-22 下午4.34.33

  • list不仅是一个双向链表,而且还是一个环状双向链表。所以它只需要一个指针,便可以完整实现整个链表。由于list是一个双向链表(double linked-list),迭代器必须具备前移、后移的能力,所以list提供的是Bidirectional Iterators。
    屏幕快照 2017-04-22 下午4.39.17

  • 插入操作(insert)和合并操作(splice)都不会造成原有的list迭代器失效。这在vector是不成立的,因为vector的插入操作可能造成记忆体重新配置,导致原有的迭代器全部失效。甚至list的元素删除操作(erase)也只有“指向被删除元素”的那个迭代器失效,其他迭代器不受任何影响。


List与Array,Vector,Deque的区别
屏幕快照 2017-04-22 下午4.41.56


构造函数与析构函数
屏幕快照 2017-04-22 下午4.44.11


非修改性操作
屏幕快照 2017-04-22 下午4.44.54


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

屏幕快照 2017-04-22 下午4.55.33


赋值操作
屏幕快照 2017-04-22 下午4.53.50


迭代器相关函数

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

屏幕快照 2017-04-22 下午5.17.00


元素的插入与删除

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

屏幕快照 2017-04-22 下午5.35.08

屏幕快照 2017-04-22 下午5.35.35

屏幕快照 2017-04-22 下午5.37.44


接合函数
屏幕快照 2017-04-22 下午5.39.25
屏幕快照 2017-04-22 下午5.39.34


异常处理
屏幕快照 2017-04-22 下午5.41.21


实例
a

posted @ 2017-04-22 16:35  I呆呆  阅读(137)  评论(0编辑  收藏  举报