std::list是由双向链表来实现。
std::list在任何位置执行插入和删除的复杂度都为O(1)。
在std::list中添加、移动和移除元素不会使迭代器或引用失效,迭代器只有在对应元素被删除时才会失效。
template <typename T>
class list {
    T value;
    T* prev;
    T* next;
}
list的size
std::list<int> l1;
// 输出24
std::cout << sizeof(l1) << std::endl;
构造函数
using std::list;
list<int> l1;                         // 无元素
list<int> l2{1, 2, 3, 4, 5};          // 列表初始化
list<int> l3(4);                      // 4个元素,初始值为0
list<int> l4(5, 3);                   // 5个元素,初始值为3
list<int> l5(l4);                     // 使用另外一个list拷贝构造
list<int> l6(std::move(l5));          // 使用另外一个list移动构造
list<int> l7(l6.begin(), l6.end());   // 使用迭代器初始化[左闭,右开)
成员函数
访问
  
    
      | 成员函数 | 函数说明 | 
  
  
    
      | front() | 返回对第一个元素的引用。 | 
    
      | back() | 返回对最后一个元素的引用。 | 
  
修改
  
    
      | 成员函数 | 说明 | 
  
  
    
      | push_front(const T& value) | 在 list的开头添加一个新元素value。 | 
    
      | pop_front() | 移除 list的第一个元素。 | 
    
      | push_back(const T& value) | 在 list的末尾添加一个新元素value。 | 
    
      | pop_back() | 移除 list的最后一个元素。 | 
    
      | insert(const_iterator position, const T& value) | 在 position前插入一个新元素。 | 
    
      | erase(const_iterator position) | 移除 position处的元素。 | 
    
      | emplace_front(Args&&... args) | 在 list开头通过就地构造插入新元素。 | 
    
      | emplace_back(Args&&... args) | 在 list末尾通过就地构造插入新元素。 | 
    
      | emplace(const_iterator position, Args&&... args) | 在 position处通过就地构造插入新元素。 | 
    
      | clear() | 移除所有元素,使 list变为空。 | 
    
      | resize(size_type count) | 改变 list的大小为count。 | 
    
      | swap(list& other) | 与另一个 list交换内容。 | 
  
容量
  
    
      | 成员函数 | 说明 | 
  
  
    
      | empty() | 如果 list中没有元素,则返回true。 | 
    
      | size() | 返回 list中元素的数量。 | 
    
      | max_size() | 返回 list可以容纳的最大元素数量。和系统或库实现相关。 | 
  
操作
  
    
      | 成员函数 | 说明 | 
  
  
    
      | unique() | 移除相邻的重复元素。 | 
    
      | merge(list& other) | 将另一个有序的 list合并到当前列表中。 | 
    
      | splice(const_iterator position, list& other) | 在 position前将另一个list的所有元素移动到当前列表中。 | 
    
      | remove(const T& value) | 移除所有等于 value的元素。 | 
    
      | reverse() | 反转列表中的元素顺序。 | 
    
      | sort() | 对列表中的元素进行排序。 | 
  
迭代器
  
    
      | 成员函数 | 说明 | 
  
  
    
      | begin() | 返回指向 list第一个元素的迭代器。 | 
    
      | end() | 返回指向 list最后一个元素之后位置的迭代器。 | 
    
      | rbegin() | 返回指向 list最后一个元素的反向迭代器。 | 
    
      | rend() | 返回指向 list第一个元素之前位置的反向迭代器。 | 
    
      | cbegin() | 返回指向 list第一个元素的const迭代器。 | 
    
      | cend() | 返回指向 list最后一个元素之后位置的const迭代器。 | 
    
      | crbegin() | 返回指向 list最后一个元素的const反向迭代器。 | 
    
      | crend() | 返回指向 list第一个元素之前位置的const逆向迭代器。 |