【C++模拟实现】反向迭代器的实现

news2024/7/4 5:17:55

【C++模拟实现】反向迭代器的实现

目录

  • 【C++模拟实现】反向迭代器的实现
      • 反向迭代器的代码示例
      • 反向迭代器的模拟实现要点
        • 引入iterator模版参数
        • rbegin()和rend()的实现

作者:爱写代码的刚子

时间:2023.9.5

前言:本篇博客主要介绍反向迭代器的实现,通过对正向迭代器的复用以及模版的使用来实现反向迭代器。


反向迭代器的代码示例

namespace test
{
    template<class iterator,class Ref,class Ptr>
    struct __reverse_iterator
    {
        typedef __reverse_iterator<iterator,Ref,Ptr> Self;
        iterator _it;

        //构造函数
        __reverse_iterator(iterator it)
                :_it(it)
        {}
				//	运算符重载
        Ref operator*()
        {
            iterator tmp(_it);
            return *(--tmp);
        }

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

        Self& operator--()
        {
            ++_it;
            return *this;
        }

        Self& operator++()
        {
            --_it;
            return *this;
        }
        bool operator!=(const Self& l) const{
            return _it!=l._it;
        }
    };
}

反向迭代器的模拟实现要点

引入iterator模版参数

引入iterator模版参数,与vector、list等容器的iterator实现基本相同,但是对it指针的处理相反。在使用模拟实现的reverse_iterator时需要传入对应的类型,并使用typedef。例:vector中:

在这里插入图片描述

rbegin()和rend()的实现

以vector举例:

在这里插入图片描述

注意函数名和传入参数的不同!在实现reverse_iterator时也要注意


由于reverse_iterator复用了iterator的部分逻辑,实现大体相同。(提供的示例代码中后置++和–的运算符重载没有提供实现)

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

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

相关文章

数字孪生与GIS:智慧城市的未来之路

数字孪生和地理信息系统&#xff08;GIS&#xff09;是两个在现代科技中崭露头角的概念&#xff0c;它们的融合为智慧城市项目带来了革命性的机会。本文将解释数字孪生为何需要融合GIS&#xff0c;并以智慧城市项目为例进行说明。 数字孪生是一种虚拟模型&#xff0c;它精确地…

财报解读:多品牌故事下,贝泰妮能否持续领航功效护肤?

2023年上半年&#xff0c;在消费品零售大盘整体上行之际&#xff0c;我国化妆品零售市场也实现了回暖。据国家统计局数据&#xff0c;上半年&#xff0c;全国社会消费品零售总额为227588亿元&#xff0c;同比增长8.2%。其中&#xff0c;化妆品零售总额为2071亿元&#xff0c;同…

苹果电脑系统性能检测 Geekbench 6 for Mac

Geekbench 是一款流行的跨平台基准测试工具&#xff0c;用于评估计算机和移动设备的性能。它可以测量处理器、内存、图形处理器和存储设备等硬件的性能&#xff0c;并生成相应的性能评分。 Geekbench 提供了简单易用的用户界面&#xff0c;用户只需点击运行测试即可开始评估设…

攻防世界-Hear-with-your-Eyes

原题 解题思路 是一个没有后缀的文件&#xff0c;题目提示要用眼睛看这段音频&#xff0c;notepad打开文件&#xff0c;没什么东西。 加后缀zip再解压看看。 使用Audacity打开音频文件

使用 Web HID API 在浏览器中进行HID设备交互(纯前端)

文章目录 目的基础说明示例工程&#xff08;HID透传测试工具&#xff09;总结 目的 最近再搞HID透传 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;后篇&#xff09;》 。 市面上的各种测试工具都或多或少存在问题&#xff0c;所以就自己写一个工具进行测试。目前来…

运动耳机选购攻略、好的运动耳机推荐

如今&#xff0c;蓝牙耳机不仅是手机的最佳伴侣&#xff0c;也成为了运动爱好者的必备装备。但是&#xff0c;在如此众多的蓝牙耳机中&#xff0c;你是否对选购感到困惑呢&#xff1f;实际上&#xff0c;选择适合运动的蓝牙耳机需要考虑许多因素&#xff0c;如舒适度、稳固性、…

app自动化测试(Android)

Capability 是一组键值对的集合&#xff08;比如&#xff1a;"platformName": "Android"&#xff09;。Capability 主要用于通知 Appium 服务端建立 Session 需要的信息。客户端使用特定语言生成 Capabilities&#xff0c;最终会以 JSON 对象的形式发送给 …

气象站的构成及功能应用

气象站是一种用于观测、记录和报告天气数据的设备。它是由数据采集系统、通讯系统、供电系统和立杆支架构成。 一、气象站的构成&#xff1a; 数据采集系统&#xff1a;用于测量气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 通讯系统&#xff1a;收集和处理传感…

深度解析lettuce,为什么单连接也可以处理高并发redis请求

简介 什么是lettuce Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端&#xff08;注1&#xff09;。Lettuce客户端基于Netty的NIO框架实现&#xff0c;对于大多数的Redis操作&#xff0c;只需要维持单一的连接即可高效支持业务端的并发请求 —— 这点与Jedis的连接…

电子科大软件系统架构设计——面向对象建模基础

文章目录 面向对象建模基础UML建模语言UML模型图用例图活动图类图顺序图通信图状态机图构件图部署图包图对象图组合结构图扩展图交互概览图时间图 BPMN建模语言业务建模定义模型元素流对象活动事件网关 流数据人工制品泳池和泳道 建模案例订单采购流程建模电商系统订货业务流程…

ITIL重大事件管理综合指南

什么是ITIL中的重大事件 重大事件是一个高影响力的紧急问题&#xff0c;通常影响整个组织或其主要部分。重大事件几乎总是导致组织的服务变得不可用&#xff0c;从而导致该组织的业务受到打击&#xff0c;并最终影响其财务状况。重大事件可以通过两种方式影响组织的服务&#…

MATLAB中movmean函数用法

目录 语法 说明 示例 向量的中心移动平均值 向量的尾部移动平均值 矩阵的移动平均值 包含缺失值的向量的移动平均值 基于样本点计算移动平均值 仅返回满窗口平均值 movmean函数的功能是对数据进行移动求平均值。 语法 M movmean(A,k) M movmean(A,[kb kf]) M mov…

四川玖璨电子商务有限公司:短视频有什么运营

根据短视频有什么运营&#xff0c;短视频的拍摄工具多种多样。无论是在手机上拍摄还是使用专业摄影设备&#xff0c;拍摄短视频的目的都是为了吸引观众的注意力和提升内容的质量。从小花费到高投入&#xff0c;在不断发展的短视频行业中&#xff0c;拍摄方法也得到了不断创新和…

Hadoop YARN HA 集群安装部署详细图文教程

目录 一、YARN 集群角色、部署规划 1.1 集群角色--概述 1.2 集群角色--ResourceManager&#xff08;RM&#xff09; 1.3 集群角色--NodeManager&#xff08;NM&#xff09; 1.4 HA 集群部署规划 二、YARN RM 重启机制 2.1 概述 2.2 演示 2.2.1 不开启 RM 重启机制…

RHCA之路---EX280(7)

RHCA之路—EX280(7) 1. 题目 Configure quotas and limits for project shrimp so that: The ResourceQuota resource is named ex280-quota The amount of memory consumed across all containers may not exceed 1Gi The total amount of CPU usage consumed across all con…

Qt包含文件不存在问题解决 QNetworkAccessManager

这里用到了Qt的网络模块&#xff0c;在.pro中添加了 QT network 但是添加 #include <QNetworkAccessManager> 会报错说找不到&#xff0c;可以通过在项目上右键执行qmake后&#xff0c;直接#include <QNetworkAccessManager>就不会报错了&#xff1a;

固定资产管理怎么改革

固定资产管理改革需要考虑以下几个方面&#xff1a; 建立完善的管理制度和流程&#xff1a;制定固定资产管理的规章制度&#xff0c;明确各部门的职责和任务&#xff0c;规范资产采购、登记、领用、保管、维修、报废等流程。 采用先进的资产管理软件&#xff1a;通过采用先进的…

【python基础知识】5.for循环和while循环

文章目录 前言for...in...循环语句for循环&#xff1a;空房间for循环&#xff1a;一群排队办业务的人range()函数for循环&#xff1a;办事流程 while循环while循环&#xff1a;放行条件while循环&#xff1a;办事流程 两种循环对比 前言 上一关&#xff0c;我们学习了两种新的…

新23转债上市价格预测

新23转债 基本信息 转债名称&#xff1a;新23转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;11.6亿元。 正股名称&#xff1a;新泉股份&#xff0c;今日收盘价&#xff1a;53.17元&#xff0c;转股价格&#xff1a;51.35元。 当前转股价值 转债面值 / …

新手学习导航设计的10个技巧

如果一个网站有良好的可用性&#xff0c;基本的需求是良好的导航设计。 本文结合社区优秀的网页导航设计案例&#xff0c;总结了网页导航设计的10项技能。 网页导航设计案例即时设计是一款支持在线协作的专业级 UI 设计工具&#xff0c;支持 Sketch、Figma、XD 格式导入&#…