【C++模拟实现】反向迭代器的实现
【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的部分逻辑,实现大体相同。(提供的示例代码中后置++和–的运算符重载没有提供实现)
相关文章:
【C++模拟实现】反向迭代器的实现
【C模拟实现】反向迭代器的实现 目录 【C模拟实现】反向迭代器的实现反向迭代器的代码示例反向迭代器的模拟实现要点引入iterator模版参数rbegin()和rend()的实现 作者:爱写代码的刚子 时间:2023.9.5 前言:本篇博客主要介绍反向迭代器的实现&…...
Kubernetes技术--k8s核心技术持久化存储
有时候需要在集群中进行一些重要的数据进行持久化存储,然后需要的时候再进行挂载,那么下面我们一起来看看如何实现数据的持久化存储操作。 1.nfs网络存储 -1.找一台服务器做nfs的服务端,安装nfs。(这里我们直接在master上实现)。 这里应该找再单独的搭建一个node节点做持…...
【80天学习完《深入理解计算机系统》】第十四天 复习第三章
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...
库中是如何实现string类的?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...
无涯教程-JavaScript - WORKDAY.INTL函数
描述 WORKDAY.INTL函数返回带有自定义周末参数的指定工作日数之前或之后的日期的序列号。周末参数指示哪些和多少天是周末。周末和指定为假期的任何日子均不视为工作日。 语法 WORKDAY.INTL (start_date, days, [weekend], [holidays])争论 Argument描述Required/OptionalS…...
STM32--蓝牙
本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制 简介 蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代…...
java 实现原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它允许创建对象的副本,而无需暴露对象的创建细节。在Java中,原型模式通常通过克隆对象来实现。要实现原型模式,需要满足以下条件: 被克隆的对…...
maven本地安装jar包install-file,解决没有pom的问题
背景: 公司因为权限问题,没有所有的代码,内部maven还在搭建,所以需要拿到同事的jar包,本地install: mvn install:install-file -DgroupIdcom..framework -DartifactIdcloud-api -Dversion1.0.0-SNAPSHOT …...
【C++学习笔记】5、变量作用域
文章目录 【 1、局部变量 】【 2、全局变量 】【 3、局部变量和全局变量的初始化 】 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称…...
Python中的装饰器
迷途小书童的 Note 读完需要 5分钟 速读仅需 2 分钟 装饰器是一个非常有用而又常被误解的功能,可以让我们在不修改函数或类的源代码情况下给它们提供扩展功能。本文将通过具体示例带你深入理解 Python 装饰器的用法。 1 装饰器基础 装饰器本质上是一个函数ÿ…...
什么是RESTful API,Spring MVC如何支持RESTful架构
文章目录 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:Java框架 ✨文章内容:Spring MVC支持RESTful架构 🤝希望作者的文章能对你有所帮助…...
cin、cin.getline()、getline()的用法【C++】
一、cin>> 用法1:输入一个数字或字符 #include <iostream> using namespace std; int main () {int a,b;cin>>a>>b;cout<<ab<<endl;return 0; } 用法2:接收一个字符串,遇“空格”、“TAB”、“回车”…...
单向链表(c/c++)
链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节…...
像linux 一样清理Windows C盘
像 linux 有命令 du -sh 查看文件夹大小 但是windows 可就没有这个命令了,就算有命令,也不能扫描子目录里面的文件 但是windows 可以借助 软件来清理,和linux 一样 文件上面是目录,下面是文件所占用空间大小的图,咋…...
在Linux 下制作启动盘以及dd命令使用
在Linux 下制作启动盘以及dd命令使用 1、在Linux 下制作启动盘,可使用如下命令:2、Linux dd 命令(1)参数说明: 3、dd应用实例(1)将本地的/dev/hdb整盘备份到/dev/hdd(2)将/dev/hdb全盘数据备份到指定路径的image文件(3)将备份文件恢复到指定盘(4)备份/de…...
C语言插入排序
前言: 本文主要讲解插入排序中的直接插入排序和希尔排序。 1、直接插入排序: 1.1基本思想 直接插入排序是一种简单的插入排序法,其基本思想是把待排序的数值按照大小顺序逐个插入到一个已经排好序的有序序列中,直到将所有记录…...
SQL-DCL
DCL-管理用户 1.查询用户 USE mysql; SELECT * FROM user; 2.创建用户 CREATE USER “用户名”“主机名” IDENTIFIED BY "密码“; 3.修改用户密码 ALTER USER “用户名”“主机名” IDENTIFIED WITH mysql_native_password BY &quo…...
Elasticsearch 中的向量搜索:设计背后的基本原理
作者:ADRIEN GRAND 实现向量数据库有不同的方法,它们有不同的权衡。 在本博客中,你将详细了解如何将向量搜索集成到 Elastisearch 中以及我们所做的权衡。 你有兴趣了解 Elasticsearch 用于向量搜索的特性以及设计是什么样子吗? …...
Jquery会议室布局含门入口和投影位置调整,并自动截图
一、关于下载 1、文章中罗列了主要代码,如需使用,请前往CSDN下载进行下载,包中包含所有文件素材,开箱即用 2、下载链接:https://download.csdn.net/download/zlxls/88305636 二、有这么一个需求 1、会场进行布局&a…...
高精度乘法模板(fft)
正常高精度复杂度是o(n^2),fft复杂度o(nlogn) #define int long long//__int128 2^127-1(GCC) #define PII pair<int,int> #define f first #define s second using namespace std; const int inf 0x3f3f3f3f3f3f3f3f, N 3e5 5, mod 1e9 7; const doubl…...
LazyVim终极指南:5分钟打造高效Neovim开发环境
LazyVim终极指南:5分钟打造高效Neovim开发环境 【免费下载链接】LazyVim Neovim懒人配置。 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim LazyVim是一个基于💤 lazy.nvim的Neovim懒人配置方案,专为希望快速搭建专业开发…...
MailHog终极指南:如何快速搭建本地邮件测试环境
MailHog终极指南:如何快速搭建本地邮件测试环境 【免费下载链接】MailHog Web and API based SMTP testing 项目地址: https://gitcode.com/gh_mirrors/ma/MailHog MailHog是一款基于Web和API的SMTP测试工具,能够帮助开发者在本地快速搭建安全高效…...
OpenCore Legacy Patcher:3大突破让旧Mac重获新生的系统兼容性优化指南
OpenCore Legacy Patcher:3大突破让旧Mac重获新生的系统兼容性优化指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher(O…...
RePKG:解锁Wallpaper Engine资源宝库的终极提取与转换工具
RePKG:解锁Wallpaper Engine资源宝库的终极提取与转换工具 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG 是一款专为Wallpaper Engine设计的开源C#工具ÿ…...
拯救你的机械键盘:3步告别按键连击烦恼
拯救你的机械键盘:3步告别按键连击烦恼 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打字时突然发现屏幕上出…...
Ozon买家纠纷如何高效解决?借CaptainAI轻松化解!
做Ozon跨境电商,卖家最头疼的是买家纠纷,如买家质疑商品与描述不符、物流延迟投诉、退货商品状态分歧等。Ozon平台有纠纷处理时限,买家不满解决方案可在5个日历日内发起纠纷,平台3天审核裁决,卖家准备不足、响应不及时…...
Ansys - Fluent 在激光与电弧焊接增材领域的模拟探索
Ansys-Fluent激光电弧焊接增材数值模拟案例,激光焊接,激光增材,激光熔覆等,SLM Fluent模拟,内容包含 激光焊接熔池演变(视频教程) SLM激光熔池演变(视频教程) 激光熔覆单…...
浮点数精度问题实战:如何用eps避免3.8的小数部分变成0.799999?
浮点数精度陷阱:从3.8的0.799999现象到工业级误差控制方案 当你在金融交易系统中发现0.01元的差额,或在游戏物理引擎中看到角色卡进墙壁,背后可能都是浮点数精度问题在作祟。最近团队在开发高频交易系统时,一个简单的价格计算3.8…...
开源协作机器人的架构革命:OpenArm如何重构机器人研发范式
开源协作机器人的架构革命:OpenArm如何重构机器人研发范式 【免费下载链接】openarm OpenArm v0.1 项目地址: https://gitcode.com/GitHub_Trending/op/openarm 当传统工业机械臂的封闭生态成为技术创新的桎梏,当高昂的硬件成本将学术研究拒之门外…...
别再傻傻分不清了!AUTOSAR里那三种接口到底怎么用?
AUTOSAR接口全解析:从快递员到内部电话的通信哲学 刚接触AUTOSAR的工程师们,面对琳琅满目的接口类型时,是否常有种"明明每个字都认识,连起来却看不懂"的困惑?就像第一次走进高级餐厅,面对三种看…...
