2020-10-28

链表

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值