前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++初阶:适合新手的手撕list(模拟实现list)

C++初阶:适合新手的手撕list(模拟实现list)

作者头像
是Nero哦
发布2024-02-17 10:10:21
1250
发布2024-02-17 10:10:21
举报
文章被收录于专栏:c/c++学习与分享c/c++学习与分享

上次讲了常用的接口:今天就来进行模拟实现啦

1.基本结构与文件规划

  • list.h头文件:包含类的全部(函数的声明与定义)
  • reverseIterator.h文件:进行反向迭代器的实现
  • test.cpp源文件:进行调用test函数,测试和完善功能

基本结构:

  1. ListNode 结构体:
    • 定义了链表的节点结构,包含了三个成员变量:前驱指针 _prev、后继指针 _next 和数据 _data
    • 构造函数初始化了这些成员变量,允许在创建节点时指定初始值。
  2. ListIterator 结构体:
    • 定义了链表的迭代器结构,包含了指向节点的指针 _node
    • 重载了一系列操作符,如 *->++--!===,以便于对链表进行遍历和操作。
  3. list 类:
    • 包含了迭代器的定义、构造函数、析构函数以及一系列的操作函数。
    • 定义了两种迭代器类型:iteratorconst_iterator,分别用于可修改的迭代和只读的迭代。
    • 实现了一系列的操作函数

2.空参构造函数(constructor)

使用new:动态开辟+调用默认构造函数了


3.完善迭代器(iterator)(begin(),end())

这里为什么我们要把迭代器封装为一个类呢?明明之前模拟vectorstring时,就直接typedef

之前模拟vectorstring时,二者底层都是连续的,想要到下一个可以直接++;想要得到里面的数据可以直接* 但是现在对于list是不行的,我们就需要重载各种运算符,但是底层又是一个指针(内置类型)不能重载,现在就只能封装进一个类里,就能重载了

4.List Capacity(size(),empty())


4.增删改查(push_back,pop_back,pop_front,push_front,insert,erase)

使用test1函数看功能是否正常

6.clear()和swap()


7. 完善构造函数

7.1list (size_type n, const value_type& val = value_type());

7.2利用迭代器进行构造

为什么使用模版: 因为可能使用其他类型的迭代器来进行初始化

7.3拷贝构造

8.重载=

注意这里的参数不是常量引用,而是按值传递的。这是因为在赋值操作符中我们会调用 swap 函数,按值传递可以保证传入的参数会被复制一份,避免对原对象的修改。在函数体内,我们调用了 swap 函数,将当前对象和传入的对象进行内容交换,然后返回 *this,即当前对象的引用。

9.析构函数

调用clear函数后,就只剩下头结点了

10.反向迭代器

我们再次使用封装的思想,封装一个反向迭代器进去

此时那list类里就是这样:

好啦,list的内容也结束啦,下次就是Stack和Queue了。感谢大家支持!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本结构与文件规划
  • 2.空参构造函数(constructor)
  • 3.完善迭代器(iterator)(begin(),end())
  • 4.List Capacity(size(),empty())
  • 4.增删改查(push_back,pop_back,pop_front,push_front,insert,erase)
  • 6.clear()和swap()
  • 7. 完善构造函数
    • 7.1list (size_type n, const value_type& val = value_type());
      • 7.2利用迭代器进行构造
        • 7.3拷贝构造
        • 8.重载=
        • 9.析构函数
        • 10.反向迭代器
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档