news 2026/8/5 17:45:21

cpp中list的解析和底层代码的简单实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cpp中list的解析和底层代码的简单实现

1.list的使用方法(list 本质上是一个双链表 )

list的迭代器类型是双向迭代器(支持++,--)

1)构造函数()

默认构造函数

default (1)
explicit list (const allocator_type& alloc = allocator_type());

这个构造就是构造出哨兵位(头节点) allocator_type() 这个是对于不同类型的0值,对于char就是‘0’

range (3)
template <class InputIterator> list (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
copy (4)
list (const list& x);

range 构造函数的InputIterator是 C++ 标准中的输入迭代器(及兼容它的更高阶迭代器:前向、双向、随机访问迭代器),并非任意迭代器,输出迭代器不支持该构造

2)list的push

有push_back和push_front 这两个 对于双量表而言,时间复杂度都是O(1) 。

还有一种emplace_back 在某种情况下是比push_back 而言是高效一点的。这种特殊情况就是对要插入的元素没有操作时他就可以减少拷贝直接构造

3)迭代器访问

begin() end()

这里begin() 返回的是头节点的后面一个iterator(即第一个有效元素) end() 返回的是头节点iteraotr(最后一位有效元素的下一位)

4)任意位置的增加和删除 insert erase

iteraotr insert(iterator pos,T& val)

返回值仍是指向着新的元素,

iterator erase(iterator pos)

iterator erase(iterator first,iterator last)

这里的返回值是指向着擦除元素最后一位的下一位,对于第一个pos就是指向pos的下一位,这些和vector都是差不多的,同样需要防止迭代器失效!!!

这里的插入时前闭后开

5)splice

这个可以理解成 CTRL + C ,delete,到指向的位置CTRL+V,意思是将一段list拼接到另一个list的 pos 后面但是第一个list会被销毁。

来具体解析一下第三个,iterator position 代表的是我要插入到 list1 的哪个位置,list&x代表的是我要把哪个list插入,iterator first,iterator last 指的是插入区间,同样是前闭后开;

6)merge 中文译为整合

他这个是针对于有序list之间的整合,比如有两个递增的list我想构造出一个递增的新list

来细讲一下2 这个就是list的引用,comp是排序规则,必须和list的排序规则相同!!!

7)sort

重点:标准库中有一个 sort ,list 中有一个sort,那为什么要设计这么多个sort,不能统一吗

可以明确的看出标准库的sort是只是用随机迭代器的,而list在开篇就讲过了这是双向迭代器,所以list要单独设计,问题就出现在这里,按照道理来说标准库应该是没有这个专门的为双向设计的迭代器效率高的,大数据量下,标准库的std::sort(用于vector等支持随机访问迭代器的容器)效率是std::list::sort的两倍以上(明确两个sort的区别,避免笔误混淆)。

所以我们要排序可以直接用构造函数,用list构造出一个vector,在进行排序,效率都比直接用list的库sort效率高很多!!!可以进行测试时间(用release模式,毕竟最后看的是这个模式的效率如何)。

2.底层代码

底层代码值得一聊的就是对iterator的封装,我们用一个类对list_node* 进行封装,这个行为使得我们可以进行运算符重载,从而实现 * ++ != == 这样的东西,也可使先const_iterator 和iterator,毫无疑问这个是list_node* 直接无法实现的东西,这个完美体现了封装的魅力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 21:57:21

python基于django固定资产折旧及租赁维修管理系统的设计与实现

目录固定资产管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;固定资产管理系统摘要 该系统基于Python的Django框架开发&#xff0c;旨在为企业提供高效的固定资产折旧计…

作者头像 李华
网站建设 2026/7/30 5:47:05

python基于django语言在线考试与自动评判系统

目录基于Django的在线考试与自动评判系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Django的在线考试与自动评判系统摘要 在线考试与自动评判系统是一种利用现代网络技…

作者头像 李华
网站建设 2026/7/31 3:22:11

掌握这两点,你的 SQL 查询速度直接提升 10 倍

掌握这两点&#xff0c;你的 SQL 查询速度直接提升 10 倍据统计&#xff0c;85%的企业级应用性能问题源于低效的SQL查询。某电商公司2025年双11期间因未优化索引导致订单查询延迟超2秒&#xff0c;直接造成单日GMV损失超300万元。本文将通过B树索引原理、执行计划深度解析、动态…

作者头像 李华
网站建设 2026/8/5 4:00:22

AI论文写作工具推荐:7款高效模型与降重技巧

AI写论文工具排名&#xff1a;7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper 文…

作者头像 李华
网站建设 2026/8/1 12:40:10

钣金工厂solidworks多人共享设计云桌面方案

钣金加工行业正面临着数字化转型的关键时期&#xff0c;传统的单机版SolidWorks设计模式已无法满足现代钣金工厂的协同设计需求。当前钣金工厂在设计环节普遍存在以下痛点&#xff1a;设计文件版本混乱、硬件投入成本高、异地协作困难、数据安全性差等问题。特别是在多人协作场…

作者头像 李华
网站建设 2026/7/31 3:14:44

植物健康系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着现代农业的快速发展&#xff0c;植物健康管理成为农业生产中的关键环节。传统植物健康监测主要依赖人工观察和经验判断&#xff0c;效率低下且难以应对大规模种植需求。现代信息技术为植物健康管理提供了新的解决方案&#xff0c;通过信息化手段实现植物生长环境、病虫…

作者头像 李华