【玩转c++】反向迭代器的适配器模型
创始人
2024-06-02 05:35:37
0

本期主题:STL中反向迭代器的实现

博客主页: 小峰同学

分享小编的在学习到的知识和遇到的问题

小编的能力有限,出现错误希望大家不吝赐

1.反向迭代器

反向迭代器,我们想想,一开始我们正向迭代器,就是用类模板或者直接用原生指针,实现的.
前面我们写过的迭代器拷贝一份,然后++ 变成 -- , -- 变成++ 即可.
我们就会发现,这样实现的时候,每个容器都要去写这样一个东西.代码很冗余.
所以我们就实现一个通用的反向迭代器,就是如果存在正向迭代器,直接适配出我们的反向迭代器.
还有什么别的方法吗?
我们可以直接使用适配器,把正向迭代器,适配为一个反向迭代器.即可.

2.源码

大思路有了,直接上手.
实现过程有解析.
//反向迭代器的适配器 。namespace zxf
{//调用的时候,一般都是在别的类内部使用,供别的类调用//typedef reverse_iterator reverse_iterator;//typedef reverse_iterator const_reverse_iterator;//这里就是使用 iterator 适配 reverse_ierator//使用const_iterator 适配 const_reverse_iteratortemplateclass reverse_iterator{public:typedef reverse_iterator self;//迭代器在定义的时候 必须初始化。reverse_iterator(const iterator it):_it(it)//注意只能写在初始化列表中,不能写在函数体内部//_it是一个正向迭代器,迭代器在创建的时候必须初始化。{}self operator++(){--_it;return *this;}self operator--(){++_it;return *this;}//iterator也是一个类模板,它是对 pnode(node*)(list就是节点的指针,vector就是元素的指针) 的封装//iterator知道数据类型,但是reverse_iterator不知道数据类型。ref operator*(){//这就是为啥要给出第二个模板参数的原因之一://我们无法知道iterator类模板成员变量指向的元素的类型,所以要把那个元素的类型传过来。//另一个原因就是区分开我们的const反向迭代器和正常反向迭代器。iterator tmp = _it;return *(--tmp);//这里'--'的原因就是我们在设置反向迭代器的rbegin() 和 rend()是怎么实现的//这就是一个边界的问题,和 rbegin() ,rend()  结合看的。//假如你改变 自己实现的 rbegin() ,rend() 也可以不 '--'。}bool operator!=(const self& it)//这里引用可加可不加{return _it != (it._it);}private:iterator _it;//底层的正向迭代器。};
}

3,反向迭代器的意义是什么呢?

重点就是复用,这里的反向迭代器不是针对某一个容器写的,是针所有的容器写的,
只要一个容器有正向迭代器,就一定可以适配出反向迭代器.
代码的复用性很好,是STL中很精华的部分.

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...