15.list(下)

list底层:看看源代码:链表list内有很多

核心在这,

看一下。h,不要关注细节

指针用void*搞,其实没必要这是成员标量速看定义,是个节点指针,然后看一下初始化这是邵兵为头结点,节点不是new,

走的内存池,就像malloc一样,如果插入节点调用这个creat像是buynnode,已有的值初始化,调用construct,用定位new,再看pushback

位置前面插入,看看erase,

链表由一个个节点链接起来的,要单独定义node,typedef为了更方便,这枚内存池就new

目标迭代器,简单实现pushcack,

可以增加一个size,库里可能没有,这样一会方便。

迭代器才是主流的遍历方式

迭代器要如何才能实现。

我们要去遍历这个结构,节点指针搞不定+不到下一个node,

他的迭代器是这个,

有这样一个类,核心成员是link_type就是node*,这个类封装了一个node节点指针,解引用就是节点,++就是到下一个位置,找不到下一个位置,节点并不是连续的

重载了operator*,返回节点的数据,

------++,我这个节点存了下一个节点地址,所以取到next给给自己,就到下一个位置了,

为什么三个类,链表这个类,基本的结构;哨兵位,节点类是一个一个结构体,现在要遍历,本来用节点指针,我们希望迭代器统一方式去遍历,节点指针就不能支持,用结构就封装,重载运算符就能达到类似行为。

运算符重载能帮我们改变一些类的行为。class和struct都可以,一般都用class,除非惯例上不想用访问限定符限制成员访问,就用struct。链表一会大量访问这两个东西。所以。

迭代器++返回值还是迭代器。

typedef也受访问限定符的限制,我这个迭代器想让外面用,所以放共有

节点的指针就能构造一个迭代器,还差一个构造函数

迭代器本身就是节点指针,只是节点指针不满足迭代器需求,,努力用类封装一层,

这样搞有名对象还不如直接搞匿名对象。

甚至直接returnhead------next

我返回的是个节点的指针,接受的是iterator,节点指针可以隐士类型转换成iterator,

我要去new我要调用构造,没写构造,转换不成功,又报错说没有合适默认构造,因为下面是带参

这是带参,,没有默认构造,这显示传参传参

传匿名对象,因为T在这个地方不确定,或者这里提供默认构造,那这里缺省参数给什么

给T的默认对象,如果是内置类型给0,0.0空指针,这里对内置类型升级如果是自定义类型,调用默认构造,迭代器已经跑出来了

链表为空,只有一个哨兵位头结点

begin end是自己,相等就结束了,空链表压根就不会进去。

it就是指针,只是我封装了一下

insert 是在pos之前插入,需要获取节点的指针,解释了为什么struct搞成全共有,链表要不断访问prev next这些,为什么迭代器也全共有,成员变量这些都紧密联系。pos之前插入,里面有这个位置的指针,我得拿到这个位置指针,前一位置指针,该指针指向就行

这时候push back 和pushfront不需要自己写了复用insert

insert要求传迭代器,end就是head,再看一下erase,前后位置一链接,

pos不能等于end,插入可以等于头结点,erase不行

头删尾删:

头删尾删都搞好了,比C语言就多了个迭代器

相关推荐
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢4 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚5 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·5 小时前
CSAPP(lecture 13_02 Linking)
c语言·c++
旖旎夜光5 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
青少儿编程课堂7 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
白杨尚青8 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
旖旎夜光9 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习
apcipot_rain9 小时前
C++转Java日记(05)
java·开发语言·c++