当前位置: 首页 > 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;
}

相关文章:

  • PyQt5高效布局指南:QTabWidget与QStackedWidget实战解析
  • Spark 中,创建 DataFrame 的方式(Scala语言)
  • Cesium中根据不同条件设置3D Tiles样式
  • 从零开始建立个人品牌并验证定位变现性的方法论——基于开源AI大模型、AI智能名片与S2B2C商城生态的实证研究
  • Github 2025-05-24 Rust开源项目日报 Top10
  • 解决Docker容器内yum: not found、apt: not found、apk: command not found等命令找不到问题
  • 在Mac中使用pyenv管理Python版本:从安装到虚拟环境的全流程指南
  • 大模型剪枝主流技术方案
  • 【KWDB 创作者计划】KWDB单机性能测试:从零开始的详细教程
  • 《Fastjson 与 Jackson 哪个更快?从序列化原理到实战性能对比》
  • python使用pycharm和conda 设置默认使用清华镜像
  • 人脸美颜磨皮祛痘3:深度学习SUNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)
  • 【深度学习新浪潮】什么是MCP?
  • 2025年ESWA SCI1区TOP,离散人工蜂群算法+多农场多除草机器人任务分配,深度解析+性能实测
  • 织梦dedecms登录后台出现Safe Alert Request Error step 2
  • Android Studio 连接夜神模拟器 自动断开的问题
  • 基于PLC和触摸屏的蔬菜热泵干燥装置电控系统
  • rce命令执行原理及靶场实战(详细)
  • 《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》
  • Unity3D仿星露谷物语开发49之创建云杉树
  • 高校档案网站建设的目的是什么意思/神秘网站
  • 阿里巴巴网站/站外推广方式
  • 做b2c网站多少钱/关键词在线听
  • 网站内容的编辑和更新怎么做/比百度好用的搜索软件手机版
  • 关于微网站策划ppt怎么做/最好用的搜索引擎
  • 手机网站建设深圳/怎样推广品牌