list是STL中顺序容器的一种,支持快速的插入删除。也可以简单的把它当作一个双向链表。
为了使用list,必须在头文件中包含下行代码
#include <list>
list是属于std命名空间的,因此使用的时候需要std::list<class T>
初始化
所有容器类型都定义了默认构造函数,用于创建指定类型的空容器对象。默认构造函数不带参数。但除了默认构造函数以外,容器类型还提供其他的构造函数,使用者可以指定元素初值
迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型,list可以通过迭代器来实现元素的访问。
迭代器范围这个概念是标准库的基础。
C++使用一对迭代器来标示迭代器范围(iterator range),这两个迭代器分别指向同一容器的两个元素或超出末端的下一位置。如果分别使用first和last来命名的话,它们标示了从first开始并且包括first,到last为止并且不包括last的一段元素。如果两个迭代器相等,则迭代器范围为空。注意,这里first,last区分顺序,last可以等于first,或者指向first标记的元素后面的某个元素,但绝对不能指向first标记的元素前面的元素!!!
容器操作
1)begin和end操作
表中每个操作都有两种不同的版本:const与非const。这些操作返回什么类型取决于容器是否为const。如果容器不是const,则分别返回iterator或者reverse_iterator类型。如果容器是const,则其返回类型需要加上const_前缀,也就是const_iterator或者const_reverst_iterator类型。
2)数据访问
注:list不允许通过下标来访问元素!!!
3)添加元素
4)删除元素
5)关系运算符
list支持使用关系操作符来实现两个容器的比较,要求元素类型必须相同。例如list<int>只能和list<int>比较,而不能和list<string>比较。
容器的比较是基于容器内元素的比较。即容器内元素支持的关系操作符,该容器才能支持。
容器的关系运算类似于string类型的关系运算:
1如果两个容器具有相同的长度并且所有元素都相等,那么这两个容器就相等,否则不等
2.如果两个容器的长度不相同,但较短的容器中所有元素都等于较长容器中对应的元素,则称较短的容器小于另一个容器
3.如果两个容器都不是对文的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素
6)容器大小
容器的capacity(容量)与size(长度)的区别非常大。size指容器当前拥有的元素个数;而capacity则指容器在必须重新分配存储空间之前可以存储的元素总数。
7)赋值操作
assign操作首先删除容器内所有的元素,然后将其参数所指定的新元素插入到该容器中。如果两个list存储的元素类型相同,则等同于使用赋值运算符操作。但如果在不同类型容器内,元素类型不相同但是相互兼容,例如string,char *,则其赋值运算必须使用assign函数。
***********************