【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

文章目录

  • 前言
  • 一、反向迭代器封装(reverseiterator)
    • 1.构造函数
    • 1解引用操作.
    • 3.->运算符重载
    • 4.前置++,后置++
    • 5.前置--,后置--
    • 6.不等号运算符重载
    • 7.完整代码
  • 二、rbegin()以及rend()
    • 1.rbeign()
    • 2.rend()


前言

我们要写出一个通用的反向迭代器模拟而且在保证代码简介不繁琐的的情况下,一定程度上使用我们自己模拟的已经封装好的iterator迭代器可以简化许多步骤,首先我们要知道正向迭代器与反向迭代器在位置上的关系

在这里插入图片描述
在这里插入图片描述

一、反向迭代器封装(reverseiterator)

1.构造函数

Iterator _it;ReverseIterator(Iterator it)//iterator这里回头传的是正向迭代器:_it(it){}

1解引用操作.

typedef ReverseIterator<Iterator, Ref, Ptr> self;Ref operator*() {Iterator tmp(_it);//因为从end()位置开始,所以要先--,//获得新的位置,但不改变原来的_it//所以建立一个临时对象对其进行--操作return *(--tmo);}

3.->运算符重载

Ptr operator->() {return &( operator*());}

4.前置++,后置++

self& operator++() {--_it;//举例:从rbegin位置开始,也就是end()位置//因为此时的位置无效要前一个位置才有效,所以先前置--//反向迭代器的++就是正向迭代器的--return *this;}self operator++(int) {self tmp(*this);--_it;return tmp;}

5.前置–,后置–

self& operator--() {++_it;return *this;}self operator--(int) {self tmp(*this);++_it;return tmp;}

6.不等号运算符重载

bool operator!=(const self& s)const {return _it!= s._it;}

7.完整代码

namespace simulation {template<class Iterator ,class Ref,class Ptr>//相当于://typedef ReverseIterator<iterator, T&, T*> reverseiterator;//typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;struct ReverseIterator {Iterator _it;ReverseIterator(Iterator it):_it(it){}typedef ReverseIterator<Iterator, Ref, Ptr> self;Ref operator*() {Iterator tmp(_it);//因为从end()位置开始,所以要先--,//获得新的位置,但不改变原来的_it//所以建立一个临时对象对其进行--操作return *(--tmo);}self& operator++() {--_it;//举例:从rbegin位置开始,也就是end()位置//因为此时的位置无效要前一个位置才有效,所以先前置--//反向迭代器的++就是正向迭代器的--return *this;}self operator++(int) {self tmp(*this);--_it;return tmp;}self operator--(int) {self tmp(*this);++_it;return tmp;}self& operator--() {++_it;return *this;}Ptr operator->() {return &( operator*());}bool operator!=(const self& s)const {return _it!= s._it;}};
}

二、rbegin()以及rend()

//先在vctor或者list的头文件中进行重定义
typedef ReverseIterator<iterator, T&, T*> reverseiterator;
typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;

1.rbeign()

reverseiterator rbegin() {//反向迭代器的开头对正向迭代器末尾进行操作return reverseiterator(end());}const_reverseiterator rbegin()const {return const_reverseiterator(end());}

2.rend()

reverseiterator rend() {return reverseiterator(begin());}const_reverseiterator rend()const {return const_reverseiterator(begin());}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学分析:外微分

先回顾下微分的概念&#xff0c;首先我们找到一个道路x&#xff0c;它是关于时间t的函数&#xff0c;然后我们可以得到一个速度&#xff0c;也就是切向量&#xff0c;所有道路的切向量组成了切空间。如果从泛函角度来理解&#xff0c;它应该是一个求偏导的基。是一个向量。而微…

从零开始学习 Java:简单易懂的入门指南之数组(五)

java基础知识 1.数组概念&#xff1a; 2.数组的定义格式一&#xff1a;格式二&#xff1a;详解&#xff1a;注意点&#xff1a; 3.数组的静态初始化完整格式&#xff1a;格式详解&#xff1a;注意点&#xff1a;简化格式:练习1&#xff1a;练习2&#xff1a;练习3&#xff1a; …

国内 github.com经常打不开的解决办法

1、打开网站http://tool.chinaz.com/dns/ 2、在A类型中填写github.com,再点击监测按钮 3、复制下面任意一个ip 4、打开电脑文件C:\Windows\System32\drivers\etc下的host文件 5、在host文件的最后一刚加入刚才复制的IP 6、重新打开GitHub

[内测招募] IDEA 插件 X-ChatGPT 内测预览版 支持自定义 ChatGPT 回调函数 释放 AI 的无限可能性

X-ChatGPT 独创的 [项目感知] 功能 打造更精准、更智能、更懂你 的专属 ai 编程助手 这个插件是一款基于开源项目 ChatGPT-Next-Web的 IntelliJ IDEA 平台的插件 价格 &#xff1a;免费、速率限制 每小时/100 次/ip 使用方式 &#xff1a;在 IDEA 插件商店中搜索 X-ChatGPT…

DNP透明屏有哪些优点?

DNP透明屏是一种新型的显示技术&#xff0c;它能够将图像或视频直接投射到透明的屏幕上&#xff0c;使得观众可以同时看到屏幕后面的实物。 这种技术在广告、展览、商场等场合得到了广泛的应用。 DNP透明屏的工作原理是利用光学投影技术&#xff0c;将图像或视频通过投影仪投射…

品牌活动 | 阿里云云原生技术实践营:大模型+CloudOS,实现企业智能化

近日&#xff0c;由阿里云举办的“云原生技术实践营-应用和容器实践专场”在广州顺利开展。行云创新CEO马洪喜作为受邀嘉宾之一&#xff0c;参加了本次活动&#xff0c;分享了主题为“API大语言模型&#xff0c;以非侵入式实现企业业务智能化变革”的演讲&#xff0c;向参会者展…

【设计模式|行为型】命令模式(Command Pattern)

说明 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象&#xff0c;这些对象之间彼此独立&#xff…

json-server详解

零、文章目录 json-server详解 1、简介 Json-server 是一个零代码快速搭建本地 RESTful API 的工具。它使用 JSON 文件作为数据源&#xff0c;并提供了一组简单的路由和端点&#xff0c;可以模拟后端服务器的行为。github地址&#xff1a;https://github.com/typicode/json-…

Spark编程-Spark中的Row

Spark中的Row Spark中的Row是Spark SQL中的一种数据结构&#xff0c;用于表示一行数据。 代码案例 创建Row对象 import org.apache.spark.sql.Row // 创建一个Row对象&#xff0c;表示一行数据 val row Row("John", 30, "New York") // 访问Row对象的字…

芯片制造详解.刻蚀原理.学习笔记(五)

本篇笔记是看完原视频后的整理和补充&#xff0c;建议各位观看原视频&#xff0c;这里附上地址。 如何雕刻芯片&#xff1a;刻蚀原理&#xff5c;芯片制造详解05 芯片制造详解.刻蚀原理.学习笔记 五 一、刻蚀技术的分类二、刻蚀中三个关键指标2.1 刻蚀速率2.2 选择比2.3 方向性…

Arm 扩大开源合作伙伴关系,加强投入开放协作

作者&#xff1a;Arm 开源软件副总裁 Mark Hambleton Arm 和我们的生态系统的关键信念之一是与开源社区合作&#xff0c;共创一个高度发达的 Arm 架构&#xff0c;使软件的落地更加稳定&#xff0c;从而让全球数百万开发者能够测试并创建自己的应用。 为此&#xff0c;Arm 支…

pytorch学习——线性神经网络——1线性回归

概要&#xff1a;线性神经网络是一种最简单的神经网络模型&#xff0c;它由若干个线性变换和非线性变换组成。线性变换通常表示为矩阵乘法&#xff0c;非线性变换通常是一个逐元素的非线性函数。线性神经网络通常用于解决回归和分类问题。 一.线性回归 线性回归是一种常见的机…

RISC-V公测平台发布 · 如何在SG2042上玩转k3s

前言 Kubernetes是一个开源的容器管理平台&#xff0c;通过Kubernetes的跨集群管理功能&#xff0c;用户可以方便地进行应用程序的复制、迁移和跨云平台的部署。 而k3s作为Kubernetes的轻量级发行版&#xff0c;相比传统的Kubernetes具有更小的二进制文件大小和更低的资源消耗…

#typescript 使用file-saver模块#

场景&#xff1a;前端使用file-saver模块做导出文档的时候&#xff0c;出现两个错误 1&#xff1a;npm run build 提示找不到模块&#xff0c;如图 解决方法&#xff1a; 先卸载&#xff0c;不管是否安装都先要卸载 ,然后安装&#xff1a; npm uninstall file-saver npm…

流星特效案例代码

实际效果&#xff0c;代码下载即可使用 流星图片 <!-- 描述: 流星特效 作者: Jack GUO 日期: 20230727 --> <template> <div class"wrap-container sn-container"> <div class"pd-main-left"> <div class"yun-container&…

【并发编程】ThreadLocal

从名字我们就可以看到 ThreadLocal 叫做线程变量&#xff0c;意思是 ThreadLocal 中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的。 ThreadLocal 为变量在每个线程中都创建了一个副本&#xff0c;那么每个线程可以访问自己内部的副本变量。 static ThreadL…

Flutter环境搭建踩坑集锦

Flutter 背景准备工作先检查一下自己的电脑&#xff0c;看一下是不是满足配置要求下载安装配置环境下载安装JDK下载安装Android studio下载Flutterflutter doctor故障Android license status unknownNetwork resources 故障 后记 背景 发现一个不错的框架Flutter&#xff0c;听…

SVO pro 编译运行

SVO pro 编译运行 编译安装ROS安装依赖下载和编译 编译 安装ROS 小鱼一键安装ROS 安装依赖 Install catkin tools and vcstools # For Ubuntu 18.04 Melodic sudo apt-get install python-catkin-tools python-vcstool # For Ubuntu 20.04 Noetic sudo apt-get install …

openpnp - 设备矫正的零碎记录

文章目录 openpnp - 设备矫正的零碎记录概述笔记设备内部不能有任何强干扰源相机就选100W像素的就行, 没有特殊要求openpnp软件的选择视觉归位必须禁止轴的赤隙矫正不用做运行openpnp软件的计算机, 必须是台式机校验完成后, 数据占用的体积END openpnp - 设备矫正的零碎记录 概…