你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

STL教程(三): 序列容器--list

2021/12/30 21:10:40

一、list介绍

list和vector一样,也是一种序列容器,并且允许在序列内的任何地方进行恒定时间插入和擦除操作。

/*
T 可以是任意数据类型
Allocator:空间配置器,用于获取/释放内存以及构造/销毁该内存中的元素的分配器,默认为allocator(new/delete),一般不做修改。
*/
template<class T,class Allocator = std::allocator<T>>
class list;


list是由双向链表实现的,每个节点存储一个元素,内存分配是不连续的。与其他基本标准序列容器(数组, vector和deque ),列表在元素插入、提取以及移动方面通常表现的更好,相应的,list的主要缺点就是它无法通过位置直接访问元素,即不支持随机访问,例如:访问list中的第六个元素,必须从已知位置(如开头或结尾)迭代到该位置。
list与forward_list非常相似:主要区别在于forward_list对象是单链表,因此它们只能向前迭代,以换取更小更高效的交换。

二、list的成员函数

(1)构造函数

​
explicit list (const allocator_type& alloc = allocator_type()); 
//构造一个空容器,没有元素,也是默认构造函数

explicit list (size_type n);
list (size_type n, const value_type& val,const allocator_type& alloc = allocator_type());
//构造一个包含n 个元素的容器,每个元素都是val的副本。


template <class InputIterator> list (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type());
// 构造一个包含与范围[first,last)元素的容器,每个元素都从该范围内的相应元素以相同的顺序就位构造。

list (const list& x);
list (const list& x, const allocator_type& alloc);
// 以列表x构造一个容器,其中包含x中每个元素的副本。

list (list&& x);
list (list&& x, const allocator_type& alloc); 
/* 构造一个容器,并从x中获取元素。
如果指定了alloc并且与x的分配器不同,则移动元素。否则,不会构造任何元素(它们的所有权直接转移)。
x处于未指定但有效的状态*/


list (initializer_list<value_type> il,const allocator_type& alloc = allocator_type()); 
//以相同的顺序构造一个容器,其中包含il中每个元素的副本。