恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

STL中的list的介绍及模拟实现(C++)

  • 首页
  • 资讯中心
  • /
  • STL中的list的介绍及模拟实现(C++)

相关资讯

BiliTools速通指南:这款开源B站视频下载工具,一次搞定视频、弹幕与无损音乐 2026/8/14 14:45:34
ComfyUI中文工作流合集实战指南:50+即用模板,带你零基础快速上手AI创作 2026/8/14 14:40:33
B站视频下载终极指南:用免费开源的 BilibiliDown,一键把喜欢的视频全部抱回家 2026/8/14 14:40:33

最新资讯

AntiDupl 图片去重全攻略:三步找回上百 GB 磁盘空间
当10GB日志让IDE卡死:KLOGG日志分析工具如何把故障排查提速4倍?
零基础用 Redash 搭建数据看板:一个下午让你的仓库数据自动说话
用Python让AWR1843毫米波雷达“看见”世界:实时数据读取与可视化实战
YOLOv8自瞄项目实战解读:从看见敌人到扣动扳机的15毫秒
C# Modbus-ASCII 超详细完整笔记(协议原理+LRC算法+读写源码全拆解)

今日推荐

青岛煜鹏网站建设公司如何帮助传统企业实现数字化转型破局与增长路径
内蒙古生产建设兵团四师三十四团知青网站:承载岁月记忆与青春荣耀的精神家园
梅州市住房与城乡建设局官网:获取权威建筑信息、政策解读与民生服务的最佳平台入口

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

STL中的list的介绍及模拟实现(C++)

发布时间:2026/8/14 14:45:34
STL中的list的介绍及模拟实现(C++) list介绍list即数据结构中的链表STL中实现的是带头双向链表它的物理地址不连续。相比于vector由于其物理地址不连续的特点它的模拟实现较为复杂。咱们还是先介绍认识一下再尝试模拟实现构造函数list()默认构造list (const list x)拷贝构造list (InputIterator first, InputIterator last)通过任意容器的迭代器初始化list (size_type n, const value_type val value_type())初始化为n个value值迭代器的使用beginend分别返回指向第一个数据的迭代器和指向最后一个数据的下一个位置的迭代器rbeginrend分别返回指向最后一个数据的迭代器和指向第一个数据的前一个位置的迭代器empty判断是否为空size返回有效节点个数数据访问front返回第一个节点数据的引用back返回最后一个节点数据的引用增删查改push_front在首元素前插入数据pop_front删除首元素push_back尾插pop_back尾删insert指定位置插入数据erase指定位置删除数据swap交换两个listclear清空listlist模拟实现首先我们要构建框架因为是带头双向链表我们List类中成员只需包含哨兵位即链表的头然后即可跟随链表结点中的next和prev遍历链表。按照C语言版的数据结构中的思路List类中成员为头的地址指向下一个结点的next指针以及指向上一个结点的prev指针。STL则是将链表结点封装成了一个类我命名为List_node这样List 不用关心节点内部怎么存数据只操作节点指针新增 / 删除节点只需要创建 / 销毁List_node对象因此如下图所示我们的List类只有一个成员_head,其类型为List_node*即Node*此外List_node是struct类因为无论其成员函数还是成员变量均可默认为public由于list物理结构的特殊性迭代器的实现不能跟vector等的那么简单因为其前置或后置可能找到的不是当前结点的下一个结点由此我们要想办法结合前面的语法知识可以想到重载以使他走到下一个结点利用当前结点的_next少实现了一个函数我们如此费力地实现了迭代器我们可以不实现吗答案是利大于弊1、封装通用的相似的遍历容器的方式并且封装屏蔽容器结构的差异和底层实现细节2、通用/复用实现算法时用迭代器函数模板方式实现跟底层容器结构解耦接下来就是const_iterator无论是typedef还是函数重载都无法实现因此我们可以考虑再封装一个const_List_iterator类如下少实现了一个函数有上面的铺垫后我们在学习一下迭代器地两个模板类融合为一个类但能实现两个类的功能为了List代码的可读性做出如下处理构造函数empty_init函数给list创建哨兵位因为接下来的函数也要使用封装成了函数拷贝构造利用初始化列表构造listswap函数赋值运算符重载析构函数clear函数pop_back函数push_front函数pop_front函数有关迭代器函数利用匿名对象提高效率insert函数push_back函数这里实现较为复杂是因为push_back函数的设计在insert之前可以通过insert函数设计push_back函数代码十分简洁erase函数size函数如果list类中成员变量不含有效数据个数_size此处size函数实现较为复杂我们在list类中添加一个_size,size函数实现起来就简单多了

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号