用阿里云做网站会不会被黑,app拉新推广平台,成都建设网站公司哪家好,临淄信息网最新招聘小时工首先我们要实现List的STL,我们首先要学会双向带头链表的数据结构。那么第一步肯定是要构建我们的节点的数据结构。 首先要有数据域#xff0c;前后指针域即可。
再通过模板类进行模板化。
然后再写List的构造函数#xff0c;这个地方用T,通过引用就可以减少一次形参拷…首先我们要实现List的STL,我们首先要学会双向带头链表的数据结构。那么第一步肯定是要构建我们的节点的数据结构。 首先要有数据域前后指针域即可。
再通过模板类进行模板化。
然后再写List的构造函数这个地方用T,通过引用就可以减少一次形参拷贝的发生提高性能。
其次const可以提高安全性和扩展性这样const T和T就都能传引用但是又保证了数据的不可修改。 然后我们再写List类和迭代器。
迭代器的作用其实就是将容器内容的访问与修改进行包装使得使用的程序员可以不直接对底层数据进行修改这样不仅提高了数据的安全性并且提高了使用者的规范性和代码的可读性。也通过屏蔽底层实现增加了移植性。
首先我们先分析迭代器和List的类的基本成员和模板的使用。
迭代器中实际的成员仍然是我们的原生节点指针但通过迭代器的包装就避免了我们直接使用节点更避免了我们直接操控节点的数据域和指针域起到多重包装的作用。
List本质是一个对节点操作的工具所以只需要携带一个size统计数量和锁定头节点这里是哨兵卫节点就可以了本身不携带数据节点的内容。
然后就是分析模板的使用先对List进行分析。
首先定义出我们的模板T然后为了实现const迭代器和普通迭代器正常情况下我们要实现两遍但是由于存在模板我们可以将这个重复的工作交给编译器。
本质就是通过List先锁定T模板是什么类型再通过域限定符去调用里面的常量迭代器的类模板参数列表并且通过调用构造函数。
于是我们通过模板实现了两个类型的迭代器借助编译器进行实现。 理清楚了我们的模板用法剩下的工作就驾轻就熟了
首先实现插入这样我们的头插尾插就可以复用insert了。
、
同样我们可以先写erase这样后面头删尾删就可以复用erase了。 其他实现也非常简单主要要讲的就是list的析构函数和的运算符重载。
析构函数就是先清除数据再抹掉头节点即可没有很大难度。但是一定要分清楚顺序不要先抹除头节点或者忘记抹除。
运算符重载的写法是现代写法主要可以方便形参的lt会被编译器自动回收而不用自己去操作内存减少代码量。 然后我们来研究list的构造函数首先我们要写一个空链表的构造也就是头节点的构造函数可以为我们的无参构造和初始化提供方便。那么无参构造就可以直接复用了而有参构造也可以直接利用其进行头节点的初始化。
当我们完善了List,接下来我们就可以继续完善我们迭代器。 主要就是实现各个运算符的重载难度不大。
但是我们要注意的是各个重载的返回类型
首先对于,-这种移动显然返回类型应该也是相应的迭代器类。
然后就是对迭代器解引用显然就是要获取对应的数据所以返回的是其数据内容数据的引用
而-其实外层会有一个-所以我们实现的时候不能直接把数据内容传出去而是要返回数据的地址不然就是错误的。本质可以写出-node-data-data。
和!显然返回bool值就没有其他内容了。