STL中list类的自己简单实现

前面写了STL中关于string类和vector类的简单实现,要想成体系学习的小伙伴可以看一看(48条消息) STL中vector类的自我简单实现_芜湖开冲~的博客-CSDN博客https://blog.csdn.net/qq_55143256/article/details/124241928

(76条消息) STL中string类的自己实现_芜湖开冲~的博客-CSDN博客_stl string实现

今天我们继续来简单实现STL中list的简单实现,所谓简单实现,就是没什么技术含量,很简单就能实现,当然,其实好多方法,和官方给的也差不多,基本都是那么回事,稍微学一下就看明白了,虽然底下代码挺多的,但是大部分都是代码复用,真正要理解的,也就是几个点而已.

目录

具体步骤 

1.迭代器的简单理解

2.链表结构的简单理解

3.设置自己的命名空间

4.设置类

定义节点类

定义迭代器类

5.实现迭代器类

构造与拷贝构造

解引用

前置++和后置++

前置--和后置--

不等于和等于

提取符

6.构造与析构

构造函数

拷贝构造函数

赋值运算符重载

析构函数

7.迭代器

8.容量

9.取头和尾

10.插入和删除

尾插尾删头插头删

任意位置插入

任意位置删除

清空和交换

总结


具体步骤 

1.迭代器的简单理解

迭代器,咱们也不搞那些虚的,什么分类,官方定义什么的,咱就搞清楚一点,就是这个玩意是干什么的就够了,干什么的,也很简单,你可以理解为光标,也就是你打字的时候,你打一个字,后面的那个竖道道就会自动往后面动一下,迭代器其实本质就是这个玩意,就是为了方便我们对数组之类的进行遍历的时候用的,我给它++一下,它就跳到下一个元素上面去了,所以,咱们自己给给迭代器下一个定义:迭代器就是方便我们进行对数组元素等进行操作(如++一下,就跳到下一个,方便遍历)的光标.

当然,我们今天讲的是链表,那就是方便对链表元素进行操作的光标,在前面string和vector的操作中,因为它两的底层空间都是连续的,所以就直接用原生态的指针就行了,我想访问下一个元素,直接对指针进行++不就行了么,今天的链表由于底层空间不连续,所以我们对指向某一元素的地址直接进行++,谁知道搞出来的是什么妖魔鬼怪,所以我们需要一点点的改进.

2.链表结构的简单理解

 对链表有了解的可以直接往下翻,这个就是简单的解释一下链表,如图所示,链表的本质就是这个玩意,中间的val存放具体的动西,比如说我存放一个数字,一个字符,甚至一个数组,一个程序什么的都行,然后next是一个指针,指向下一个这个小玩意,比如说我这个里面放一个lol程序,下一个里面放一个吃鸡程序,我玩完lol,想玩吃鸡,我只需要通过next指针指向的地址,就可以知道吃鸡在哪里了,(什么,你说我吃鸡在桌面上?那你前年随手接收的一个文件在哪你知道么?如果有一个链表,把你所有接收的文件都串起来,那你想找某个日期以后的,只要一直顺着next找就行了,以前的,那自然就是prev了)嗯,前后的next和prev就是负责找它前面节点和后面节点的,好多节点串一串,就构成了链表.

3.设置自己的命名空间

为什么要设置自己的命名空间呢,很简单,人家自己有list类,那我们要想玩,就得关起门,我们自己造我们自己的,不和他们一起玩,当然,你也可以不叫list,也行,那没有和人家同名,就不需要这一步了,我的建议是加上,一方面显得专业,另一方面美观,编程也是一门艺术嘛,是吧,之后的代码都在命名空间里面.

我制造的命名空间(是不是很简单)
 

namespace czz{}

4.设置类

这一步很关键,也是最难的一步,可能也是唯一难的一步,就是你要想明白这三个类的联系,不然后面他们真的联系起来了你就一脸目瞪狗呆了

定义节点类

 所谓的节点类,就是为我们前面那个描述链表的图形给制造出来,就是把那两个指针和一个val包装在一个结构体,准确的说叫做类里面(当然,用的是模板,鬼知道你要往val里面填什么玩意)

template<class T>

    struct ListNode

    {

        ListNode(const T& val = T())  //构造函数
            :_val(val)
            ,_pPre(nullptr)
            ,_pNext(nullptr)
        {}

        ListNode<T>* _pPre;

        ListNode<T>* _pNext;

        T _val;

    };

如果不知道什么是类的小伙伴可以去学一下,也不难,不知道什么是模板的小伙伴可以看一下这个博客,写的又简单又精彩(狗头)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值