跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ std::list 容器接口详解与使用指南

C++ STL 中 std::list 容器的完整接口。内容涵盖构造函数、赋值重载、迭代器访问、容量查询、元素访问与修改、以及各类操作函数如 splice、remove、sort 等。std::list 基于双向循环链表实现,支持高效的任意位置插入与删除,适合需要频繁增删操作的场景。文章还列出了相关的非成员函数及运算符重载用法。

Ne0发布于 2026/3/30更新于 2026/10/2696 浏览
C++ std::list 容器接口详解与使用指南

一、list 的接口

std::list 是一个带头的双向循环链表,支持在任意位置的插入和删除操作。

1. 构造函数
// 无参构造
list();

// n 个 val 去构造
explicit list(size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());

// 用一段迭代器区间去构造
template<class InputIterator>
list(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());

// 拷贝构造
list(const list& x);

// 初始化列表去构造
list(initializer_list<value_type> il, const allocator_type& alloc = allocator_type());
2. 赋值重载
// 用另一个 list 对象赋值给一个 list 对象
list& operator=(const list& x);

// 用初始化列表赋值给 list 对象
list& operator=(initializer_list<value_type> il);
3. 迭代器
iterator begin() noexcept;
const_iterator begin() const noexcept;
iterator end() noexcept;
const_iterator   ;


;
;
;
;
end
()
const
noexcept
// 反向迭代器
reverse_iterator rbegin() noexcept
const_reverse_iterator rbegin() const noexcept
reverse_iterator rend() noexcept
const_reverse_iterator rend() const noexcept
4. 容量
// 判空
bool empty() const noexcept;

// 容器元素的个数
size_type size() const noexcept;
5. 访问元素
// 返回容器中第一个元素的引用
reference front();
const_reference front() const;

// 返回容器中最后一个元素的引用
reference back();
const_reference back() const;
6. 修改
// 用一段迭代器赋值
template<class InputIterator>
void assign(InputIterator first, InputIterator last);

// 用 n 个 val 赋值
void assign(size_type n, const value_type& val);

// 用初始化列表赋值
void assign(initializer_list<value_type> il);

// 头插
void push_front(const value_type& val);

// 头删
void pop_front();

// 尾插
void push_back(const value_type& val);

// 尾删
void pop_back();

// 在 pos 位置插入单个元素
iterator insert(const_iterator position, const value_type& val);

// 在 pos 位置插入 n 个 val
iterator insert(const_iterator position, size_type n, const value_type& val);

// 在 pos 位置插入一段迭代器区间
template<class InputIterator>
iterator insert(const_iterator position, InputIterator first, InputIterator last);

// 在 pos 位置插入一个初始化列表
iterator insert(const_iterator position, initializer_list<value_type> il);

// 删除 pos 位置的元素
iterator erase(const_iterator position);

// 删除一段迭代器区间
iterator erase(const_iterator first, const_iterator last);

// 交换两个 list 对象的内容
void swap(list& x);

// n < size,保留前 n 个元素
// n > size,插入元素到 n 个,如果 val 是具体的,就用 val 的拷贝去初始化,否则,将被值初始化
void resize(size_type n);
void resize(size_type n, const value_type& val);

// 清空 list 中所有的元素
void clear() noexcept;
7. 操作
// 在 pos 位置插入一个 list 对象
void splice(const_iterator position, list& x);

// 只转移 x 对象中 i 位置的元素到另一个 list 对象中
void splice(const_iterator position, list& x, const_iterator i);
void splice(const_iterator position, list&& x, const_iterator i);

// 转移 x 中的一段迭代器区间到另一个 list 对象中
void splice(const_iterator position, list& x, const_iterator first, const_iterator last);
void splice(const_iterator position, list&& x, const_iterator first, const_iterator last);

// 删除容器中所有和 val 值相等的元素
void remove(const value_type& val);

// 去重,原理双指针(只能去除相邻的重复的元素,常与 sort 搭配使用)
void unique();

// 合并链表,原理归并排序(要求两个 list 对象都是有序的)
void merge(list& x);

// comp 仿函数对象,控制比较大小的逻辑
template<class Compare>
void merge(list& x, Compare comp);

// 链表排序
void sort();
template<class Compare>
void sort(Compare comp);

// 逆置链表
void reverse() noexcept;
8. 非成员函数
// 友元函数
template<class T, class Alloc>
bool operator==(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

template<class T, class Alloc>
bool operator!=(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

template<class T, class Alloc>
bool operator<(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

template<class T, class Alloc>
bool operator<=(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

template<class T, class Alloc>
bool operator>(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

template<class T, class Alloc>
bool operator>=(const list<T, Alloc>& lhs, const list<T, Alloc>& rhs);

// 交换两个 list 对象的内容
template<class T, class Alloc>
void swap(list<T, Alloc>& x, list<T, Alloc>& y);

list 的接口到此结束。

目录

  1. 一、list 的接口
  2. 1. 构造函数
  3. 2. 赋值重载
  4. 3. 迭代器
  5. 4. 容量
  6. 5. 访问元素
  7. 6. 修改
  8. 7. 操作
  9. 8. 非成员函数

更多推荐文章

查看全部
  • 二叉树重建与完全二叉树判定实战
  • 豆包 Seedream 4.0 多图融合实战:主体一致性与多场景生成测评
  • Android Layout Weight 属性原理及正确用法
  • 用 AstrBot+NapCat 搭个 QQ 机器人,再打通公网
  • 2026 年主流 AI 辅助编程工具盘点与选型指南
  • Python 技术实战:爬虫、数据分析与自动化应用指南
  • 在 macOS 上通过 Ollama 和 Enchanted 本地部署 Llama3
  • PCTF2025 Web 后半部分解题复盘
  • Linux 线程互斥与互斥量:原理、实践与封装
  • LLM 的核心能力与局限性分析:推理、规划及世界模型
  • QQ 机器人接入 OpenClaw 的部署记录
  • 视频理解技术在产业级应用中的实践指南:从算法选型到本地化部署
  • Docker 镜像原理与分层存储机制详解
  • 为什么要学习模型和方法论
  • VSCode 中关闭 GitHub Copilot 功能
  • 纯 CSS 实现简洁名片卡片设计实战
  • PyCharm 中 Anaconda 环境配置指南
  • 软体机器人动作捕捉系统:6 大主流方案深度测评与选型指南
  • 腾讯混元大模型辅助开发自助棋牌室平台实战
  • LeRobot 开源机器人学习框架入门指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online