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

C++ 反向迭代器(Reverse Iterator)实现详解

目录

1. 反向迭代器概述

2. 代码实现分析

3. 关键点解析

3.1 模板参数设计

3.2 核心操作实现

4. 使用示例


1. 反向迭代器概述

反向迭代器是STL中一种重要的适配器,它允许我们以相反的顺序遍历容器。本文将详细讲解如何实现一个自定义的反向迭代器模板类。

2. 代码实现分析
 

namespace tyx
{template<class Iterator, class Ref, class Ptr>struct ReverseIterator{typedef ReverseIterator<Iterator, Ref, Ptr> Self;Iterator _it;// 构造函数ReverseIterator(Iterator it):_it(it){}// 解引用操作符Ref operator*(){Iterator tmp = _it;return *(--tmp);}// 箭头操作符Ptr operator->(){Iterator tmp = _it;return &(operator*());}// 前置++操作符Self& operator++(){--_it;return *this;}// 前置--操作符Self& operator++(){++_it;return *this;}// 不等比较操作符bool operator!=(const Self& s){return _it != s._it;}};
}

3. 关键点解析

3.1 模板参数设计

  • Iterator: 正向迭代器类型
  • Ref: 引用类型(解引用返回类型)
  • Ptr: 指针类型(箭头操作符返回类型)

3.2 核心操作实现

解引用操作符:

Ref operator*()
{Iterator tmp = _it;return *(--tmp);
}
  • 先复制当前迭代器
  • 向前移动一位再解引用
  • 因为反向迭代器的逻辑位置比实际存储位置"超前"一位

箭头操作符:

Ptr operator->()
{return &(operator*());
}
  • 通过解引用操作符获取引用
  • 然后取地址返回
  1. 迭代器移动:

    • operator++() 实际是正向迭代器的--
    • operator--() 实际是正向迭代器的++

4. 使用示例

#include <vector>
#include <iostream>int main()
{std::vector<int> v = {1, 2, 3, 4, 5};// 使用自定义反向迭代器tyx::ReverseIterator<std::vector<int>::iterator, int&, int*> rbegin(v.end());tyx::ReverseIterator<std::vector<int>::iterator, int&, int*> rend(v.begin());for(; rbegin != rend; ++rbegin){std::cout << *rbegin << " ";}// 输出: 5 4 3 2 1return 0;
}

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

相关文章:

  • MySQL:游标 cursor 句柄
  • 使用 C/C++ 和 OpenCV 进行像素级卷积核运算
  • 文件夹图像批处理教程
  • Python+MCP+LLM
  • Halcon 单目相机标定测量
  • DeepSeek 赋能医疗影像分析:从卷积神经网络到临床诊断效率革新
  • 怎么开发一个网络协议模块(C语言框架)之(一) main
  • Vue中的事件绑定【3】
  • HarmonyOS:相机选择器
  • 人脸识别流程与算法对比报告
  • RPA+电子处方+在线问诊:数字药店APP智能化源码开发方案探索
  • MybatisPlus入门
  • (9)-java+ selenium->元素定位之By name
  • MVCC实现原理
  • TestHubo V1.0.8版本发布,支持按模块树筛选用例,让查询更便捷
  • Todesk 软件被锁定,不记得安全密码也进不去软件改不了问题解决
  • DVWA文件上传笔记
  • SDL2常用函数:SDL_Surface 数据结构及使用介绍
  • Java核心基础
  • Python爬虫实战:研究Newspaper框架相关技术
  • [创业之路-376]:企业战略管理案例分析-战略制定/设计-市场洞察“五看”:看宏观之当前的社会发展趋势与战略应对
  • AtCoder Beginner Contest 407(ABCDE)
  • ⭐️⭐️⭐️白嫖的阿里云认证⭐️⭐️⭐️ 第三弹【课时2:RAG应用的构建和优化】for「大模型Clouder认证:RAG应用构建及优化」
  • 【Excel 支持正则的方法】解决VBA引入正则的方法和步骤
  • MFC:获取所有打印机的名称(打印机模块-1)
  • OpenHarmony外设驱动使用 (十四),WLAN
  • 基于51单片机红外人体检测、防盗报警
  • 【C/C++】线程状态以及转换
  • RabbitMQ 概述与安装
  • Spring AI 之结构化输出转换器