当前位置: 首页 > news >正文

1.反向迭代器实现思路

一.反向迭代器大致实现

#pragma once template<class Iterator> struct ReverseIterator { ReverseIterator(Iterator it) :_it(it) {} Iterator _it; };

二.重载一系列操作符

#pragma once template<class Iterator,class Ref,class Ptr> struct ReverseIterator { typedef ReverseIterator<Iterator,Ref,Ptr> Self; ReverseIterator(Iterator it) :_it(it) {} Ref operator*() { return *_it; } Ptr operator->() { return &(*_it); } Self& operator++() { --_it; return *this; } Self& operator--() { ++_it; return *this; } bool operator!=(const Self& it) { return _it != it._it; } bool operator==(const Self& it) { return _it == it._it; } Iterator _it; };

三.构造一个list的反向迭代器

然后就能实现我们的rbegin()和rend()了

1.rbegin()的实现

reverse_iterator rbegin() { return reverse_iterator(--end()); }

2.rend()的实现

reverse_iterator rend() { return reverse_iterator(end()); }

3.测试

void test_list7() { ltw::List<int> lt; lt.push_back(1); lt.push_back(2); lt.push_back(3); lt.push_back(4); ltw::List<int>::reverse_iterator rit = lt.rbegin(); while (rit != lt.rend()) { cout << *rit << " "; ++rit; } cout << endl; }

上面这个是库里面的实现(但是,我们发现这不就错了吗)

这里纯粹是为了对称,所以这样实现

四.和库里面实现的一样

#pragma once template<class Iterator,class Ref,class Ptr> struct ReverseIterator { typedef ReverseIterator<Iterator,Ref,Ptr> Self; ReverseIterator(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& it) { return _it != it._it; } bool operator==(const Self& it) { return _it == it._it; } Iterator _it; };

这样,我们的list里面也要进行修改

reverse_iterator rbegin() { return reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(begin()); }

const版本是一样的

const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }

vector也是和list是一样的,这里就不进行写了

http://www.jsqmd.com/news/453631/

相关文章:

  • 改进麻雀搜索算法的RSSI定位附Matlab代码
  • 苹果和飞书,快成新时代的Agent基建了。
  • 基于快速超螺旋自适应反步滑模控制的四旋翼无人机控制Simulink中实现,确保高精度跟踪、强抗干扰能力以及在不确定性非线性系统中的鲁棒性
  • 2026年厦门老房装修公司深度测评:五家厂商全案设计能力全解析 - 十大品牌推荐
  • MCP SDK源码深度解剖:3个致命兼容性陷阱、4层抽象设计逻辑与实时调试实战
  • 契约失效即崩溃?C++27 `[[expects:]]` 与 `[[ensures:]]` 安全校验机制全解析,5步构建零信任函数接口
  • 把ai写的东西翻译下后重新翻译回来,能查出是ai写的吗?
  • 题目1834:蓝桥杯2016年第七届真题-路径之谜
  • 计算机毕业设计java基于OCR的健康随行小程序 基于微信小程序的药盒识别与健康管理助手 设计OCR技术在健康随行记录系统中的应用研发
  • 盘点2026年盐城中考复读优质品牌机构,鸿文性价比高 - 工业品网
  • Spring Cloud微服务下多租户数据隔离崩溃预警:当Feign调用绕过租户上下文,你还在用ThreadLocal硬扛吗?
  • 五分钟搭建一个自带纠错能力的智能体!!
  • 探讨2026年好用的隧道炉厂家排名,哪家售后好 - myqiye
  • 计算机毕业设计java基于spring+协同过滤推荐算法的电影周边商城系统基于SpringBoot的电影周边产品电商平台设计协同过滤算法驱动的电影衍生品推荐系统研发
  • 打开网站显示Discuz!Database Error (1045)notconnect错误怎么办|已解决
  • 基于飞蛾扑火算法的三维路径规划方法附Matlab代码
  • 实用指南:【收尾以及复盘】flutter开发鸿蒙APP之成就徽章页面
  • OpenClaw入门篇
  • 打开网站显示HTTP 错误 403.19 - Forbidden 错误怎么办|已解决
  • EHViewer官方正版-ehviewer绿色版2.2.0.1最新版本v2.2.0.1
  • 2026年用户口碑实证:厦门中式风格装修公司推荐与五大服务商真实案例对比 - 十大品牌推荐
  • 为什么92%的感知算法工程师写的C++代码达不到ASIL-D时序要求?3个被LLM忽略的编译器级实时语义漏洞
  • TurboVNC + VirtualGL + noVNC(浏览器远程桌面配置)
  • 【独家】Dify官方未公开的RAG性能开关:启用Hybrid Fusion Mode后QPS提升2.8倍、MRR@10达0.89的实测配置清单
  • OFA视觉蕴含模型惊艳效果:艺术风格图像与诗意文本的匹配探索
  • 2026光伏行业风口下,霍尔电流传感器核心应用与选型全解析
  • IEEE 39节点Simulink模型:灵活扩建、高速响应、波形细腻,呈现丝滑美观体验
  • N1盒子飞牛NAS外接硬盘盒掉速/断连/掉盘?一招禁用 UAS 驱动,彻底解决 JMicron 兼容性问题
  • Wireshark抓包实战:从入门到精通
  • Gemini 3.1 Pro 技术深度解析:从架构跃迁到工程落地的全面评估