c++ list容器怎么用 c++双向链表list操作【详解】
发布时间 - 2025-12-26 00:00:00 点击率:次std::list是双向链表,支持O(1)任意位置增删但不支持随机访问;初始化方式多样,操作依赖迭代器,提供splice、merge、sort等高效特有方法。
C++ 的 std::list 是标准库提供的双向链表容器,底层不连续存储,支持高效地在任意位置插入、删除(O(1)),但不支持随机访问(不能用下标 [] 或 at() 直接取第 n 个元素)。
初始化和基本操作
创建 list 有多种方式:
-
std::list—— 空链表lst; -
std::list—— 初始化列表构造(C++11 起)lst = {1, 2, 3, 4}; -
std::list—— 创建含 5 个值为 10 的元素lst(5, 10); -
std::list—— 拷贝构造lst2(lst1);
常用增删改查方法
所有操作都基于迭代器,没有下标访问:
-
lst.push_front(x)—— 头插 -
lst.push_back(x)—— 尾插 -
lst.insert(it, x)—— 在迭代器it指向位置前插入(返回新元素迭代器) -
lst.erase(it)—— 删除it指向的单个元素(返回后继迭代器) -
lst.erase(first, last)—— 删除 [first, last) 区间 -
lst.pop_front()/lst.pop_back()—— 删除首/尾元素(不返回值) -
lst.front()/lst.back()—— 获取首/尾元素引用(容器非空时才安全)
遍历与查找
只能用迭代器或范围 for 循环:
- 传统迭代器遍历:
for (auto it = lst.begin(); it != lst.end(); ++it) { cout - 范围 for(推荐):
for (const auto& x : lst) { cout - 查找需手动循环或用
std::find:auto it = std::find(lst.begin(), lst.end(), 5);—— 返回第一个值为 5 的迭代器,未找到则为end()
特殊操作与注意事项
list 提供了一些普通序列容器没有的高效操作:
-
lst.splice(pos, other_lst)—— 把other_lst全部“剪切粘贴”到pos前(O(1),不复制元素) -
lst.splice(pos, other_lst, it)—— 移动other_lst中it指向的单个节点 -
lst.merge(other_lst)—— 合并两个已排序的 list(会清空other_lst) -
lst.sort()—— 对本 list 排序(比std::sort更高效,因是链表) -
lst.remove(x)—— 删除所有等于x的元素 -
lst.remove_if(pred)—— 删
除满足谓词 pred的元素 - 注意:插入/删除后,除被操作位置外,其他迭代器通常仍有效(这是 list 的优势)
不复杂但容易忽略:list 的 size() 在 C++11 前是 O(n),C++11 起保证是 O(1);频繁按位置访问(如要第 5 个元素)应考虑换用 vector 或 deque。
# c++
# 标准库
# red
# sort
# for
# const
# auto
# int
# 循环
# 迭代
# 链表
# 遍历
# 但不
# 值为
# 这是
# 第一个
# 不能用
# 只能用
# 时才
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用西部建站助手快速创建专业网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
如何在宝塔面板创建新站点?
EditPlus中的正则表达式 实战(1)
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Swift中swift中的switch 语句
Java类加载基本过程详细介绍
用yum安装MySQLdb模块的步骤方法
PHP正则匹配日期和时间(时间戳转换)的实例代码
EditPlus中的正则表达式 实战(4)
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
linux写shell需要注意的问题(必看)
JavaScript模板引擎Template.js使用详解
详解Android中Activity的四大启动模式实验简述
网站制作价目表怎么做,珍爱网婚介费用多少?
如何用PHP工具快速搭建高效网站?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何在 Pandas 中基于一列条件计算另一列的分组均值
Laravel如何升级到最新版本?(升级指南和步骤)
Python文件异常处理策略_健壮性说明【指导】
如何在服务器上配置二级域名建站?
html5的keygen标签为什么废弃_替代方案说明【解答】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
智能起名网站制作软件有哪些,制作logo的软件?
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何快速查询网址的建站时间与历史轨迹?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在香港免费服务器上快速搭建网站?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何用搬瓦工VPS快速搭建个人网站?
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel如何实现多对多模型关联?(Eloquent教程)
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Laravel怎么使用artisan命令缓存配置和视图
如何在万网自助建站平台快速创建网站?
javascript读取文本节点方法小结
北京企业网站设计制作公司,北京铁路集团官方网站?
网站制作免费,什么网站能看正片电影?


除满足谓词