std::
list
类模板 <list>
template < class T, class Alloc = allocator<T> > class list;
列表
列表是序列容器,它允许序列内任意位置的常量时间插入和擦除操作,并在两个方向上进行迭代。
列表容器实现为双链表;双链表可以将所包含的每个元素存储在不同且不相关的存储位置。
在内部,顺序是通过与前面元素的链接和后面元素的链接的关联来保持的。
它们与forward_list非常相似: 主要的区别在于forward_list对象是单链表,
因此它们只能向前迭代,以换取更小和更高效。
与其他基本标准序列容器(array、vector和deque)相比,list在插入、
提取和移动已获得迭代器的容器内任何位置的元素方面通常表现得更好,
因此在大量使用这些元素的算法(如排序算法)中也表现得更好。
与其他序列容器相比,list和forward_lists的主要缺点是它们不能直接根据元素的位置访问元素;
例如,要访问列表中的第6个元素,必须从已知位置(如开始或结束)迭代到该位置,
这需要在这两个位置之间的距离上花费线性时间。
它们还会消耗一些额外的内存来保持与每个元素关联的链接信息(对于小型元素的大列表来说,
这可能是一个重要因素)。
☲ 容器特性
-
顺序排列
-
序列容器中的元素按照严格的线性顺序排列。每个元素根据它们在这个序列中的位置来访问。
-
双向链表
-
每个元素都保留了关于如何定位下一个和上一个元素的信息,
允许在特定元素(甚至是整个范围)之前或之后进行常量时间的插入和擦除操作,
但没有直接的随机访问。
-
分配方式
-
容器使用allocator对象来动态处理其存储需求。
☲ 模板参数
-
T
-
所包含元素的类型。
别名为成员类型list::value_type。
-
Alloc
-
用于定义存储分配模型的allocator对象的类型。
默认情况下,使用allocator类模板,它定义了最简单的内存分配模型,并且是值独立的。
别名为成员类型list:: alloator_type。
☉ 成员类型
C++98:
成员类型 |
定义 |
注释 |
value_type |
起始模板参数(T) |
|
allocator_type |
第二个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
allocator_type::reference& |
默认分配器:
value_type& |
const_reference |
allocator_type::const_reference |
默认分配器:
const value_type& |
pointer |
allocator_type::pointer |
默认分配器:value_type* |
const_pointer |
allocator_type::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的随机迭代器 |
转换为const_iterator |
const_iterator |
指向const value_type的随机访问迭代器 |
|
reverse_iterator |
reverse_iterator<iterator> |
|
const_reverse_iterator |
reverse_iterator<const_iterator> |
常量反向迭代器 |
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
C++11:
成员类型 |
定义 |
注释 |
value_type |
起始模板参数(T) |
|
allocator_type |
第二个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
value_type& |
|
const_reference |
const value_type& |
|
pointer |
allocator_traits<allocator_type>::pointer |
默认分配器:value_type* |
const_pointer |
allocator_traits<allocator_type>::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的随机迭代器 |
转换为const_iterator |
const_iterator |
指向const value_type的随机访问迭代器 |
|
reverse_iterator |
reverse_iterator<iterator> |
反向迭代器 |
const_reverse_iterator |
reverse_iterator<const_iterator> |
常量反向迭代器 |
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
☞ 成员函数
迭代器:
begin |
返回指向列表容器第一个元素的迭代器。 (公众成员函数) |
end |
返回一个指向列表容器末尾元素的下一个元素的迭代器 (公众成员函数) |
rbegin |
返回指向容器中最后一个元素的反向迭代器 (公众成员函数) |
rend |
返回一个指向列表容器中第一个元素之前的理论元素的 反向迭代器.(公众成员函数) |
cbegin |
返回指向容器第一个元素的常量迭代器 (公众成员函数) |
cend |
返回一个指向容器末尾元素的下一个元素的常量迭代器 (公众成员函数) |
crbegin |
返回指向容器中最后一个元素的常量反向迭代器(公众成员函数) |
cend |
返回一个指向容器中第一个元素之前的理论元素的常量反向迭代器 (公众成员函数) |
容量:
元素访问:
修改器:
☣ 操作
空间配置器:
☣ 非成员函数重载