当前位置: 首页 > news >正文

C++模拟实现list

1.首先要了解到vs底层的list链表是带头双向循环的链表。

所以首先就要看成员变量

 那么就说明我们还需要构造一个Node的结构体,(typedef一下就好了,名字不影响)

现在就可以完成间的push_back函数了。

1.list的iterator

我们之前模拟vector和string的时候就直接typedef T* iterator

但是这个list是双向的迭代器,这个可以在C++的官网上可以查询的。

其他类型也是可以查询的:
 

 因为链表的指针注定是不可以简单的++就可以完成的,vector是用数组存储的,所以指针都是连续的,所以我们就必须想别的方法,C++牛逼的就是如果我们把iterator也封装成一个类/结构体,那么我们就可以干我们想的任何事情,因为他可以运算符重载,所以我们外边看着和vector一样的++,但是底层是完全不同的。这才是C++祖师爷强的地方,外面都是vector<>::iterator/list<>::iterator, 但是底层是天差地别。

2.list的const_iterator

有些人的想法是typedef const  _list_iterator<T> const_iterator,但是使用的时候,Q::list<int>::const_iterator it = l.begin(); ------> 相当于 Q::list<int>:: const _list_iterator it = l.begin()

那么_list_iterator 这个类是不发改变的,但是const迭代器期望指向内容是不能修改的,这样设计的迭代器本身不能修改。必然是有_node = _node->_next。所以这不能和vector一样无脑的typedef的。

        更有有说那么久重新设计一个_const_list_iterator的类就好了嘛。但是那就太过冗余了,因为里面只有部分的成员函数不一样,所以我们就不需要再设计一个类了,我们先看看他们两者类有什么区别,才能更好的统一。

这里只有返回值是不一样的,所以为什么不能将返回值再用一个模板来统一规划一下呢?

 

所以就变成了:
 

 

 3._list_iterator类的再次优化

 看一眼这个就知道要重载运算符的-> , 那就实现呗。

 

但是他实现的很奇怪:
 

 但是如果是const类型怎么办?因为它的返回值是const T*, 所以我们就有必要再加一个类模板参数了:

 

4.最后完成代码

 

 

http://www.lryc.cn/news/98762.html

相关文章:

  • PostgreSQL PG16 逻辑复制在STANDBY 上工作 (译)
  • 《零基础入门学习Python》第058讲:论一只爬虫的自我修养6:正则表达式2
  • 第一堂棒球课:MLB棒球大联盟的主要战术·棒球1号位
  • 【论文阅读】利用道路目标特征的多期车载激光点云配准
  • L---泰拉瑞亚---2023河南萌新联赛第(三)场:郑州大学
  • windows无盘启动技术开发之使用本地镜像文件启动电脑
  • PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%
  • Linux文本编辑器-vim
  • vscode使用g++编译.c文件或.cpp文件
  • 云计算的服务模式包括哪些|PetaExpress云服务商
  • iOS--通知、代理、单例模式总结
  • 选择最佳安全文件传输方法的重要性
  • IBM LSF 集群虚拟化和工作负载管理解决方案
  • C++(14):重载运算与类型转换
  • 【深度学习】基于图形的机器学习:概述
  • 内存泄漏是什么?有什么危害
  • 【项目设计】基于负载均衡的在线oj平台
  • 生产环境Session解决方案、Session服务器之Redis
  • SPECjvm2008_1_01 openjdk8 x86_64 ARM64 运行时长、成绩 Run is valid, but not compliant
  • 安卓:百度地图开发(超详细)
  • DDSv1.4规范(中文版)
  • oracle,获取每日24*60,所有分钟数
  • vue elementui table去掉滚动条与实现表格自动滚动且无滚动条
  • SDK命令行工具配置
  • 【数字IC基础】竞争与冒险
  • 速成版-带您一天学完python自动化测试(selenium)
  • windows 删除无法删除的文件
  • FFmpeg[7] - FFmpeg之预设编码参数preset
  • CVPR2023新作:3D视频物体检测
  • Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比