| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> STL容器三 -- List 详解 -> 正文阅读 |
|
|
[数据结构与算法]STL容器三 -- List 详解 |
目录前言?小伙伴们大家好啊!本文继续为大家带来有关STL容器相关的内容 -- list。list也就是链表。那么相对于顺序表表示的vector等容器来说,链表也是有自己的优点的。比如vector最大的缺点,头插和中间插入的复杂度是O(N),以及可能会浪费空间,而list最大的有点也就是头插和中间位置插都是O(1)。所以对于list的认识,就变成了必不可少的内容了。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一,STL -- List 的基本认识?1.1基本认识那么对于基本的内容,string,vector 和 list 都差不多,为了方便学习理解。所以这里我们不再过多赘述。但是在 list 中也有一些和string,vector不同的内容。 1.2 list:双向迭代器如下图所示,可以看到,它是一个 bidrectional 双向迭代器。
同时我们需要知道的,在所有的链表中,最优的一定是带头双向循环链表。而在STL中,list 的底层就是带头双向循环链表。所以本文依旧是全部按照STL源码展示的带头双向循环链表实现。
1.3一些list特有接口
但是对于这两个函数来说,用的并不是很多。 其次就是下面一些函数:
二,模拟实现好的,那么经过上面的基本了解。对于list的基本使用来说,应该是基本没有什么问题了,但是知其然,需知其所以然。为了更深层次的了解list的实现,接下来我们按照 stl 源码模板,模拟实现一下 list。 2.1节点实现
2.2正向迭代器模板实现2.2.1list迭代器:非原生指针的认识
2.2.2指针和引用的实现
2.2.3 operator++、--?操作实现
2.2.4 operator == ,!= 操作实现
2.3f反向迭代器模板实现
2.3.1基本设计
2.3.2指针 T*?和解引用 T&
2.3.3?前置++,--
2.3.4operator=,!=实现
2.4 list 模板实现2.4.1基本设计
如上图所示,我们将上面实现的三个模板:节点模板,正向迭代器,反向迭代器。都重命名一下,然后就可以使用他们的简化名字了。 2.4.2实现 list 迭代器
2.4.3构造析构
2.4.4拷贝构造,赋值重载
2.4.5 现代写法实现拷贝构造和赋值重载
在上面现在写法中,实现了有关迭代器构造一个对象的内容。但是因为它的实现,和传统的构造是是同样的道理,所以这里不实现了。
2.4.6 插入删除那么对 list 而言,有头插,尾插,指定位置的插入,删除也是一样,但是如果我们实现了指定位置的插入和删除,那么头尾的插入删除直接复用即可。
那么因为对于插入而言,因为插入之后,是在迭代器位置插入了一个元素,所以迭代器表示的元素并没有发生任何改变,也就是迭代器依旧是有效地。但是如果是删除,那么当前迭代器表示的节点就被删除了。所以当前迭代器一定会失效。
三,总结
好的,那么对于 list 的实现,到这里就全部了解完了。如果哪里有问题,还请大佬们提出来哦! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/21 21:23:36- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |