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