下面是 `C++ STL list`(即 `std::list`)的**完整用法大全**,涵盖常用成员函数、迭代器、操作与用法示例,并结合功能分类。 --- ## 🧠 基础定义 ```cpp #include std::list a; // 空 list std::list b(10); // 包含10个默认值的list(int为0) std::list c(5, 42); // 包含5个42的list std::list d(b); // 拷贝构造 std::list e = {1, 2, 3}; // 列表初始化(C++11) ``` --- ## 🚀 成员函数分类总览 ### ✅ 容器状态 | 函数名 | 说明 | | ---------------- | --------------- | | `empty()` | 判断是否为空 | | `size()` | 返回元素数量 | | `max_size()` | 返回容器可容纳的最大元素数量 | | `clear()` | 清空所有元素 | | `resize(n)` | 调整大小,若变大则用默认值补充 | | `resize(n, val)` | 同上,指定补充值 | --- ### ✅ 元素访问 | 函数名 | 说明 | | --------- | ----------- | | `front()` | 返回第一个元素的引用 | | `back()` | 返回最后一个元素的引用 | --- ### ✅ 迭代器 | 函数名 | 说明 | | ----------- | --------------- | | `begin()` | 指向第一个元素的迭代器 | | `end()` | 指向最后一个元素之后的位置 | | `rbegin()` | 反向迭代器(从后向前)开始位置 | | `rend()` | 反向迭代器的终点 | | `cbegin()` | const版本 | | `cend()` | const版本 | | `crbegin()` | const版本 | | `crend()` | const版本 | --- ### ✅ 插入/删除操作 | 函数名 | 说明 | | ------------------------- | ---------------------- | | `push_front(val)` | 插入元素到头部 | | `push_back(val)` | 插入元素到尾部 | | `pop_front()` | 删除头部元素 | | `pop_back()` | 删除尾部元素 | | `insert(it, val)` | 在迭代器 it 位置插入 val | | `insert(it, n, val)` | 在 it 处插入 n 个 val | | `insert(it, first, last)` | 插入一个区间(\[first, last)) | | `erase(it)` | 删除 it 处元素 | | `erase(first, last)` | 删除区间元素 | | `remove(val)` | 删除所有等于 val 的元素 | | `remove_if(pred)` | 删除满足谓词 pred 的元素 | | `clear()` | 清空所有元素 | | `emplace(it, args...)` | 原地构造插入元素 | | `emplace_front(args...)` | 原地构造插入到头部 | | `emplace_back(args...)` | 原地构造插入到尾部 | --- ### ✅ 排序与唯一化 | 函数名 | 说明 | | -------------------- | ---------------- | | `sort()` | 默认从小到大排序 | | `sort(comp)` | 自定义排序 | | `unique()` | 去除连续重复元素 | | `reverse()` | 反转元素顺序 | | `merge(list2)` | 合并两个**已排序**的list | | `merge(list2, comp)` | 使用自定义比较合并 | --- ### ✅ 赋值与交换 | 函数名 | 说明 | | --------------------- | -------------- | | `assign(n, val)` | 赋值 n 个 val | | `assign(first, last)` | 赋值区间元素 | | `operator=` | 赋值运算符 | | `swap(other)` | 与另一个 list 交换数据 | --- ### ✅ splice 操作(转移元素) | 函数名 | 说明 | | --------------------------------- | ----------------------------------- | | `splice(pos, list2)` | 把 list2 的所有元素移动到 pos 前 | | `splice(pos, list2, it)` | 把 list2 中的 it 元素移动到 pos 前 | | `splice(pos, list2, first, last)` | 把 list2 的 \[first,last) 区间移动到 pos 前 | --- ## 🧪 示例 ```cpp #include #include using namespace std; int main() { list a = {1, 2, 3}; a.push_front(0); // 0 1 2 3 a.push_back(4); // 0 1 2 3 4 auto it = a.begin(); advance(it, 2); a.insert(it, 99); // 0 1 99 2 3 4 a.remove(99); // 删除所有值为99的元素 a.reverse(); // 反转列表 for (int x : a) cout << x << " "; return 0; } ``` --- ## ✅ list 特点总结 | 特性 | 是否支持 | | ------ | -------------------------- | | 随机访问 | ❌ 不支持(不像 `vector` 能用 `[]`) | | 快速插入删除 | ✅ O(1) 时间在任意位置 | | 迭代器稳定性 | ✅ 删除/插入不会使其他迭代器失效 | | 元素连续性 | ❌ 元素不连续(不像数组或 vector) | | 双向链表结构 | ✅ 是 | --- 如果你还想要: * 可复制的全套模板代码 * 对每个函数的代码演示例子 * list 和 vector 的对比表 我也可以马上给你。是否继续?