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 逆向迭代器。