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

c++-reverse_iterator

C++反向迭代器

反向迭代器是C++标准库提供的一种适配器,它允许我们以相反的顺序遍历容器,反向迭代器是正向迭代器的封装

迭代器可以分为两类:

  1. 方向性质

    • 单向迭代器(Forward Iterator

    • 双向迭代器(Bidirectional Iterator

    • 随机访问迭代器(Random Access Iterator

    • 输入迭代器(Input Iterator

    • 输出迭代器(Output Iterator

  2. 遍历方向

    • 正向迭代器(iterator

    • 反向迭代器(reverse_iterator

特性输入迭代器输出迭代器单向迭代器双向迭代器随机迭代器
读(*iter
写(*iter =
++
+
-
  • 常见的单向迭代器:forward_listunordered_mapunordered_set

  • 常见的双向迭代器:listmapset

  • 常见的随机迭代器:vectorstringdeque

支持反向迭代器,普通迭代器必须支持 ++-- 运算符操作。

代码实现

// reverse_iterator.hpp
#pragma oncenamespace simulate_reverse_iterator {template<typename Iterator , typename Ref , typename Ptr>struct reverse_iterator {typedef reverse_iterator<Iterator , Ref , Ptr> self;reverse_iterator(Iterator iter) :iterator(iter) {}Ref operator*() {self temp(iterator);return *--temp;}Ptr operator->() {return &(operator*());}self& operator++() {return --iterator;}self& operator--() {return ++iterator;}bool operator==(const self& s) {return iterator == s.iterator;}bool operator!=(const self& s) {return iterator != s.iterator;}Iterator iterator;};
}

注意事项

  • 反向迭代器的operator*返回的是前一个位置的元素,这是为了保持与正向迭代器相同的半开区间语义

    • rbegin() 对应正向迭代器的end()

    • rend() 对应正向迭代器的begin()

  • 反向迭代器的 ++ 操作是对应正向迭代器的 -- 操作,-- 操作时对应正向迭代器的 ++ 操作。

http://www.dtcms.com/a/310717.html

相关文章:

  • 什么是 Redis?从基础概念到技术本质的全面解析
  • 微信小程序页面间通信的实现方式
  • 升级的MS1836C HD转CVBS/S-Video转换器
  • WooCommerce 与 ERP 系统集成解决方案
  • Agents-SDK智能体开发[1]之入门
  • 智能客服系统实战:多轮对话与知识库检索完整实现
  • DL环境捉虫
  • Python从入门到精通——第四章 程序流程控制
  • 第五届智能通信与计算国际学术会议(ICICC 2025)
  • 电子合同管理台账功能详解
  • Dify API接口上传文件 postman配置
  • Param关键字的使用
  • Pycaita二次开发基础代码解析:几何体重命名与参数提取技术
  • 如何使用Postman做接口测试
  • VS Code 插件开发教程
  • 麻醉深度监护系统市场规模从 857 百万美元向 1244 百万美元跨越,2031 年将形成更大的市场
  • 机试01——C++基础语法与库函数
  • Luckysheet 打印终极指南(预览视图+打印功能) : 2025 最新实现
  • Codeforces Educational 181(ABCD)
  • c++--格式化/clang-format
  • 亚像素级精度的二维图像配准方法
  • Java 20 新特性解析与代码示例
  • 研报复现|阿梅特欧卡莫斯集中投资法则
  • 【Kubernetes 指南】基础入门——Kubernetes 集群(二)
  • DQL 超维分析
  • QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。
  • 使用全连接神经网络训练和预测MNIST以及CIFAR10
  • 十、SpringBootWeb快速入门-入门案例
  • 玻尔兹曼分布与玻尔兹曼探索
  • 户外广告牌识别误检率↓78%!陌讯动态感知算法实战解析