一 list概述:
(1)list的数据结构:一个环状双向链表。
list特点:
*不支持随机存取
*任何位置上元素的安插和移除都非常快,始终是常数时间内完成。
*不提供subscript(下标)操作符,也不提供at()。
*Lists并未提供容量、空间重新分配等操作函数。
*Lists提供了不少特殊的成员函数,专门用于移动元素。
(2)list的迭代器:Bidirectional Iterators。
重要性质:任何位置的插入操作都不会造成原有的list迭代器失效;删除操作也只有“指向被删除元素”的那个迭代器失效,其它迭代器不受影响。
二 list的操作函数:
(1)生成、复制和销毁:list的生成、复制和销毁,和所有序列式容器相同。
(2)非变动性操作
(3)赋值:
(4)元素存取:
list不支持随机存取,只有front()和back()能够直接存取元素。
这些操作并不检查容器是否为空,对着空容器执行任何操作,都会导致未定义行为。
(5)迭代器相关函数:(list迭代器只是双向移动迭代器,所以凡是用到随机存取迭代器的算法(比如STL的sort算法)不能调用,不过list自己提供了sort函数)
只有迭代器才能存取list中的各个元素。
(6)元素的安插和删除(注意list特有的几个操作)
Lists提供了deques所有的功能,还增加了remove()和remove_if()算法应用于list身上的特殊版本。
安插或删除多个元素,单一调用比多次调用快。
lists成员函数remove()比remove算法的速度更快。所以,面对list,你应该调用成员函数remove(),而不是像vectors和deques那样调用STL算法。
三 slist(单向链表)
(1)使用方法:
在ubuntu上的方法如下:
包含头文件:#include<ext/slist>
使用命名空间:using namespace __gnu_cxx;
(2)slist与list的主要差别:
*slist的迭代器是Forward Iterator,list的是Bidirectional Iterator。
*slist所耗用的空间更小。
(3)slist的特点:
*插入、删除和接合(splice)操作都不会造成原有的迭代器失效。
*不提供push_back(),只提供push_front()、pop_front()和front()操作。