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

C++的反向迭代器

1.反向迭代器

反向迭代器(Reverse Iterator)是一种特殊的迭代器,用于反向遍历容器(从尾元素到首元素)。它本质上是对普通迭代器的封装,通过调整迭代器的递增 / 递减行为实现反向遍历。

rbegin():返回指向容器最后一个元素的反向迭代器(反向遍历的起点)。

rend():返回指向容器首元素前一个位置的反向迭代器(反向遍历的终点,类似于普通迭代器的 end())。

  • rbegin() 指向 4(最后一个元素),*rbegin() = 4
  • ++rbegin() 会指向 3(向前移动一位)。
  • rend() 指向 1 的前一个位置(无效位置),与普通迭代器的 end() 类似(不指向任何元素)。
  • 遍历循环 for (auto it = rbegin(); it != rend(); ++it) 会依次访问 4, 3, 2, 1。

2.反向迭代器的模拟实现

#pragma once
namespace my
{
template<class Iterator, class Ref, class Ptr>
class ReverseIterator
{
typedef ReverseIterator<Iterator, Ref, Ptr> Self;
public:
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& s) const
{
return _it != s._it;
}
private:
Iterator it;

    };

}

http://www.xdnf.cn/news/1406017.html

相关文章:

  • BEV-VAE
  • 二进制方式安装部署 Logstash
  • Java试题-选择题(23)
  • 【Linux基础】深入理解计算机启动原理:MBR主引导记录详解
  • 并发编程:Java中的多线程与线程池!
  • 魔方的使用
  • LangGraph 深度解析(二):掌握 LangGraph 函数式 API 的状态化 AI 工作流
  • 每日算法题【二叉树】:堆的实现、堆排序的实现、文件中找TopK
  • [光学原理与应用-338]:ZEMAX - Documents\Zemax\Samples
  • 吴恩达机器学习作业九:kmeans聚类
  • 2025最确定性的答案:AI+IP的结合
  • CNB远程部署和EdgeOne Pages
  • 恶补DSP:3.F28335的ePWM模块
  • Wheat Gene ID Convert Tool 小麦中国春不同参考基因组GeneID转换在线工具
  • TensorFlow 深度学习 | 使用底层 API 实现模型训练(附可视化与 MLP)
  • 「日拱一码」066 深度学习——Transformer
  • ADB常用命令大全
  • Linux中的Shell编程 第一章
  • 第09章 t检验:两独立样本t检验
  • 模拟|双指针
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(下)
  • python pyqt5开发DoIP上位机【介绍】
  • 【cancelToken取消重复请求】
  • uniapp开发 移动端使用字符串替换注意事项
  • GEE中上传研究区域范围
  • ModuleNotFoundError: No module named ‘_cffi_backend‘
  • 服务器CPU飙升该如何排查火焰图
  • 互联网医院系统优势介绍
  • Java试题-选择题(22)
  • 诊断通信管理(Diagnostic Communication Management)详解