Files
2025-08-28 21:17:28 +08:00

5.2 KiB
Raw Permalink Blame History

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


🧠 基础定义

#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 前

🧪 示例

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

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