当前位置:首页> 滚动 >

当前焦点!7 迭代器(下)

时间:2023-03-07 02:10:38    来源:哔哩哔哩

本项目GitHub:HuangCheng72/HCSTL: 我的STL实现 (github.com): https://github.com/HuangCheng72/HCSTL


(相关资料图)

进入正文。

在上一篇中,我们提到:

我们希望迭代器最好能像指针一样,可以通过*来读写数据,可以++,--,或者p += 3 ,p -= 4 之类的操作来移动,还可以通过两个迭代器相减计算两个迭代器之间的距离(最好同样用指针相减的结果ptrdiff_t类型表示,当然你非得用其他也行)等等。

这就需要运用C++的重载机制,在迭代器中重载这些运算符。

我们尝试用结构体封装 list 的结点,制作一个符合标准的迭代器。

list 的结点原型如下:

list 是双向链表,所以迭代器应该是双向迭代器,因此 Category 应为 bidirectional_iterator_tag 。

因此设计原型和具体实现有:

封装之后嵌入到 list 具体实现中,在 list 的内部实现中,凡是返回结点的,一律改为返回迭代器,如果不对外暴露,则保持以结点指针为基础实现。(原则,对外部暴露迭代器,对内部可以依然采用指针实现)。

整理代码如下:

main.cpp,简单测试一下,能否使用迭代器取值。

顺利运行并输出正确结果。

对于vector则不太一样,因为vector的迭代器就是其原生指针(没有比原生指针更好用的迭代器了),所以直接指定原生指针为迭代器即可。

vector.h

我们建立一个新的 algorithm.h 头文件,在其中实现 for_each 算法:

在main.cpp中测试

可以看到均正常输出,且输出相同。

欢迎访问本项目的GitHub仓库,如果对您有帮助,麻烦给项目一个star,谢谢!

HuangCheng72/HCSTL: 我的STL实现 (github.com): https://github.com/HuangCheng72/HCSTL

上一篇:

下一篇:

当前焦点!7 迭代器(下)

本项目GitHub:HuangCheng72 HCSTL:我的STL实现(github com):https: github com HuangCheng72 HCSTL进入正文。在上一篇中,我们提到:我们希

2023-03-07

痒痒痒,太难熬!入春后皮肤剧烈瘙痒,不一定是过敏_当前快报

时值阳春三月,气温回暖,万物复苏,到处都是生机勃勃的景象。此时,空气中的粉尘、花粉、细菌等也随之活跃起来,一些过敏体质和

2023-03-06

冒险岛怎么刷金币

冒险岛刷金币的方法有:1、冒险岛举行周年活动时,换一些可以交易并且值钱的东西来卖,例如帽子、披风等全职业通用的装备,也可以选择换好卷或

2023-03-06

博力威: 广东博力威科技股份有限公司关于变更保荐代表人的公告-环球报资讯

博力威:广东博力威科技股份有限公司关于变更保荐代表人的公告

2023-03-06

腐乳的制作方法步骤

1、食材:豆腐块适量、卤汤适量、食盐适量。2、将豆腐块平放在笼屉内,将笼屉内的温度控制在16摄氏度左右,并保持一定的湿度。七天后即可取出

2023-03-06

世界看热讯:奥诗娜是哪个国家的品牌啊_奥诗娜是哪个国家的品牌

1、【导读】:奥诗娜Ausalla奥诗娜Ausalla,是根据天然、纯净、健康的理念,采用澳大利亚天然原料,不断推陈出

2023-03-06

电影饺子

1、《饺子》是由陈果导演。2、杨千嬅、白灵、梁家辉、杨爱瑾主演的影片。3、于2004年8月19日上映。本文到此结束,希望

2023-03-06

环球快看:迪庆州残联开展“全国爱耳日”宣传教育暨学雷锋志愿服务活动

近日,迪庆州残疾人联合会在独克宗古城月光广场开展以“科学爱耳护耳,实现主动健康”为主题的第24个“全国爱耳日”活动。活动

2023-03-06

死亡搁浅:导演剪辑版 DEATH STRANDING DIRECTOR’S CUT v1.002 破解中文版

《死亡搁浅:导演剪辑版》破解版在保留原版游戏内容的基础上,追加了新的战斗和探索区域,也对任务、迷你游戏和剧情进行了扩展,加入了同行机

2023-03-06

英格兰和苏格兰是什么关系

1、英格兰和苏格兰同属于大不列颠及北爱尔兰联合王国。2、大不列颠及北爱尔兰联合王国(UnitedKingdomofGreatBritainandNo

2023-03-06