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

C++初阶学习——探索STL奥秘——反向迭代器

适配器模式是 STL 中的重要组成部分,除了容器适配器外,还有 选代器适配器,借助 选代器适配器 ,可以轻松将各种容器中的普通迭代器转变为反向迭代器,这正是适配器的核心思想

注:库中的反向迭代器在设计时,为了最求极致的对称,rbegin()指向最后一个有效元素的下一个位置,rend()指向第一个有效元素(位置是与正向迭代器相反的)

在模拟实现 list 迭代器类时,为了解决普通对象与 const 对象的代码冗余问题,引入了多参数,通过对形参传递不同的对象,变换为不同属性的迭代器

在STL库中就有这样的应用

在反向迭代器类中,这一种巧妙思想也得到了继承

namespace bit
{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->(){return &(operator*());}Self& operator++(){--_it;return *this;}Self& operator--(){++_it;return *this;}bool operator!=(const Self& s) const{return _it != s._it;}};
}

值得一提的是,其中这段代码:

	Ref operator*(){Iterator tmp = _it;return *(--tmp);}

它返回的并非当前所指向的对象,而且上一个对象

原因:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++初阶学习——探索STL奥秘——标准库中的priority_queue与模拟实现
  • 【正负交替的分数求和】
  • OpenAI GPT o1技术报告阅读(3)-英文阅读及理解
  • 浅谈C++调用COM组件
  • 每日刷题(算法)
  • 论文阅读-《Attention is All You Need》
  • android13隐藏桌面底部白线
  • 54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)
  • 大厂程序员的健身之路
  • Mybatis-plus进阶篇(五)
  • 探索Docker:轻松进入容器并运行命令的实用指南
  • MYSQL表操作
  • powerbi-L8-导入数据时候的动态列
  • Vue3:实现div拖拽
  • 算法打卡:第十一章 图论part02
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CSS 提示工具(Tooltip)
  • JDK9: 集成 Jshell 和 Maven 项目.
  • LeetCode29.两数相除 JavaScript
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python3爬取英雄联盟英雄皮肤大图
  • Redis学习笔记 - pipline(流水线、管道)
  • TCP拥塞控制
  • Vue实战(四)登录/注册页的实现
  • webpack+react项目初体验——记录我的webpack环境配置
  • 百度地图API标注+时间轴组件
  • 从输入URL到页面加载发生了什么
  • 当SetTimeout遇到了字符串
  • 官方解决所有 npm 全局安装权限问题
  • 我的业余项目总结
  • 一份游戏开发学习路线
  • 优秀架构师必须掌握的架构思维
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​比特币大跌的 2 个原因
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #include到底该写在哪
  • (04)odoo视图操作
  • (1) caustics\
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (3)选择元素——(17)练习(Exercises)
  • (31)对象的克隆
  • (70min)字节暑假实习二面(已挂)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)JAVA使用POI操作excel
  • (算法)Game
  • (学习日记)2024.02.29:UCOSIII第二节
  • .gitignore文件---让git自动忽略指定文件
  • .naturalWidth 和naturalHeight属性,