Renewed Structure

This commit is contained in:
e2hang
2025-08-28 21:17:28 +08:00
parent b97f348a51
commit 1a5c4329b2
163 changed files with 312 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
下面是 `C++ STL list`(即 `std::list`)的**完整用法大全**,涵盖常用成员函数、迭代器、操作与用法示例,并结合功能分类。
---
## 🧠 基础定义
```cpp
#include <list>
std::list<int> a; // 空 list
std::list<int> b(10); // 包含10个默认值的listint为0
std::list<int> c(5, 42); // 包含5个42的list
std::list<int> d(b); // 拷贝构造
std::list<int> 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 <iostream>
#include <list>
using namespace std;
int main() {
list<int> 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 的对比表
我也可以马上给你。是否继续?