Files
2025-12-31 00:39:23 +08:00
..
2025-12-31 00:39:23 +08:00
2025-12-31 00:39:23 +08:00

下面是 C++ STL list(即 std::list)的完整用法大全,涵盖常用成员函数、迭代器、操作与用法示例,并结合功能分类。


🧠 基础定义

#include <list>
std::list<int> a;                  // 空 list
std::list<int> b(10);              // 包含10个默认值的list(int为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 前

🧪 示例

#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 的对比表

我也可以马上给你。是否继续?