链表
template <class T, class allocator<T>> class list;
介绍
list是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作,并在两个方向上进行迭代。
list被实现为双向链表,双向链表中包括了存储在不同内存位置中的元素,每个元素中包括了上一个和下一个元素的位置的信息。
list很像forward_list,不同点是forward_list是单向链表,在forward_list中只能进行前向的迭代,作为交换,forward_list占用空间更少,操作更高效。
与其它标准容器(array,vector,deque)相比,列表通常在将元素插入、删除和移动时表现更好,因此,在诸如排序算法之类的大量使用这些操作的算法中表现更好。
容器属性
- 顺序性
容器中的元素被按顺序排列在一个严格线性的序列中,可以通过元素的位置来读取。 - 双向链接性
每个元素保留有关如何定位下一个和上一个元素的信息,从而允许在特定元素(甚至整个范围)之前或之后进行恒定时间的插入和擦除操作,但不能进行直接随机访问。 - 分配器感知
容器使用分配器来动态分配所需内存。
模板参数
- T
元素类型,别名list::value_type - Alloc
分配器类型,别名list::allocator_type
成员函数
构造函数
/* 默认 */
explicit list(const allocator_type& alloc = allocator_type());
/* 填充 */
explicit list(size_type n);
explicit list(size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
/* 范围 */
template <class InputIterator>
list(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
/* 拷贝构造 */
list(const list& x);
list(const list& x, const allocator_type& alloc = allocator_type());
/* 移动构造 */
list(list&& x);
list(list&& x, const allocator_type& alloc = allocator_type());
/* 初始化列表 */
list(initializer_list<value_type> il, const allocator_type& alloc = allocator_type());
// 举例
// constructing lists
#include <iostream>
#include <list>
int main ()
{
// constructors used in the same order as described above:
std::list<int> first; // empty list of ints
std::list<int> second (4,100); // four ints with value 100
std::list<int> third (second.begin(),second.end()); // iterating through second
std::list<int> fourth (third); // a copy of third
// the iterator constructor can also be used to construct from arrays:
int myints[] = {16,2,77,29};
std::list<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );
std::cout << "The contents of fifth are: ";
for (std::list<int>::iterator it = fifth.begin(); it != fifth.end(); it++)
std::cout << *it << ' ';
std::cout << '\n';
return 0;
}
// Output
The contents of fifth are: 16 2 77 29
迭代器
begin() end() rbegin() rend() cbegin() cend() crbegin() crend()
容量
size() max_size() empty()
元素读取
front() back()
元素操作
assign()
emplace_front()
push_front()
pop_front()
emplace_back()
push_back()
pop_back()
emplace()
insert()
erase()
swap()
resize()
clear()
splice()
remove()
remove_if()
unique()
merge()
sort()
reverse()