【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

这篇具有很好参考价值的文章主要介绍了【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌏博客主页: 主页
🔖系列专栏: C++
❤️感谢大家点赞👍收藏⭐评论✍️
😍期待与大家一起进步!



前言

我们要写出一个通用的反向迭代器模拟而且在保证代码简介不繁琐的的情况下,一定程度上使用我们自己模拟的已经封装好的iterator迭代器可以简化许多步骤,首先我们要知道正向迭代器与反向迭代器在位置上的关系

【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器),c++,list,java
【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器),c++,list,java文章来源地址https://www.toymoban.com/news/detail-619321.html

一、反向迭代器封装(reverseiterator)

1.构造函数

Iterator _it;
		ReverseIterator(Iterator it)
		//iterator这里回头传的是正向迭代器
			:_it(it)
		{}

1解引用操作.

typedef ReverseIterator<Iterator, Ref, Ptr> self;
		Ref operator*() {
			Iterator tmp(_it);
			//因为从end()位置开始,所以要先--,
			//获得新的位置,但不改变原来的_it
			//所以建立一个临时对象对其进行--操作
			return *(--tmo);
		}

3.->运算符重载

Ptr operator->() {
			return &( operator*());
		}

4.前置++,后置++

self& operator++() {
			--_it;
			//举例:从rbegin位置开始,也就是end()位置
			//因为此时的位置无效要前一个位置才有效,所以先前置--
			//反向迭代器的++就是正向迭代器的--
			return *this;
		}
		self operator++(int) {
			self tmp(*this);
			--_it;
			return tmp;
		}

5.前置–,后置–

self& operator--() {
			++_it;
			return *this;
		}
		self operator--(int) {
			self tmp(*this);
			++_it;
			return tmp;
		}

6.不等号运算符重载

bool operator!=(const self& s)const {
			return _it!= s._it;
		}

7.完整代码

namespace simulation {
	template<class Iterator ,class Ref,class Ptr>
	//相当于:
	//typedef ReverseIterator<iterator, T&, T*> reverseiterator;
	//typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;
	struct ReverseIterator {
		Iterator _it;
		ReverseIterator(Iterator it)
			:_it(it)
		{}
		typedef ReverseIterator<Iterator, Ref, Ptr> self;
		Ref operator*() {
			Iterator tmp(_it);
			//因为从end()位置开始,所以要先--,
			//获得新的位置,但不改变原来的_it
			//所以建立一个临时对象对其进行--操作
			return *(--tmo);
		}

		self& operator++() {
			--_it;
			//举例:从rbegin位置开始,也就是end()位置
			//因为此时的位置无效要前一个位置才有效,所以先前置--
			//反向迭代器的++就是正向迭代器的--
			return *this;
		}
		self operator++(int) {
			self tmp(*this);
			--_it;
			return tmp;
		}

		self operator--(int) {
			self tmp(*this);
			++_it;
			return tmp;
		}
		self& operator--() {
			++_it;
			return *this;
		}
		Ptr operator->() {
			return &( operator*());
		}

		bool operator!=(const self& s)const {
			return _it!= s._it;
		}

	};
}

二、rbegin()以及rend()

//先在vctor或者list的头文件中进行重定义
typedef ReverseIterator<iterator, T&, T*> reverseiterator;
typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;

1.rbeign()

reverseiterator rbegin() {
			//反向迭代器的开头对正向迭代器末尾进行操作
			return reverseiterator(end());
		}
		const_reverseiterator rbegin()const {
			return const_reverseiterator(end());
		}

2.rend()

reverseiterator rend() {
			return reverseiterator(begin());
		}
		const_reverseiterator rend()const {
			return const_reverseiterator(begin());
		}

到了这里,关于【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】反向迭代器的设计

    + 前言 STL中不少的容器需要有迭代器这样的设计, 特别是正向迭代器,几乎每个容器都有自己的特定实现方式 ,有了正向迭代器之后,我们还要提供反向迭代器以供一些特殊的需求,但是许多容器的正向迭代器实现的方式不一样,如果我们要实现其反向迭代器,每个容器的

    2024年02月02日
    浏览(42)
  • 【C++】STL反向迭代器模拟实现,迭代器适配器,迭代器类型简单介绍

    本篇主要讲反向迭代器的模拟实现。 能够加深各位对泛型的理解。 前面我那篇string介绍里面已经提到过反向迭代器是啥了,如果点进来的同学还不知道,可以看看:[string介绍](https://blog.csdn.net/m0_62782700/article/details/130796914? spm=1001.2014.3001.5501) 迭代器,可以在不暴露底层实现细

    2024年02月16日
    浏览(46)
  • c++--反向迭代器的实现

    1.反向迭代器 迭代器有两种,一种是正向的,一种是反向的,方向迭代器的主要功能就是实现数据的反向访问,通过正向迭代器的适配生成的,适配器就是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一

    2024年02月16日
    浏览(44)
  • 深入篇【C++】手搓模拟实现list类(详细剖析底层实现原理)&&模拟实现正反向迭代器【容器适配器模式】

    1.一个模板参数 在模拟实现list之前,我们要理解list中的迭代器是如何实现的。 在vector中迭代器可以看成一个指针,指向vector中的数据。它的解引用会访问到具体的数据本身,++会移动到下一个数据位置上去,这些都是因为vector具有天生的优势:空间上是连续的数组,这样指

    2024年02月15日
    浏览(46)
  • 【STL】模拟实现反向迭代器

    目录 1. 读源码 2. 搭建框架  3. 迭代器的操作 operator*()  operator-() operator++() operator--() operator!=() 4. 实现 list 的反向迭代器 5. 实现 vector 的反向迭代器 6. 源码分享 写在最后: 我们之前实现的 vector,list 好像都只实现了他们的正向迭代器,那有正向, 会有反向迭代器这种东西吗

    2024年02月13日
    浏览(41)
  • STL之list模拟实现(反向迭代器讲解以及迭代器失效)

    这次是关于list的模拟实现的代码,先看看下面的代码: 上面是list的代码,其底层是一个带头双向循环的链表,实现的方法就不说了,相信大家已经都会了,然后自己实心的list我没有写析构函数等,这个也很简单,循环利用成员函数中的删除函数就可以。 先来说说个人认为

    2024年02月11日
    浏览(42)
  • 从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)

    目录 1. priority_queue的模拟实现 1.1 未完全的priority_queue 1.2 迭代器区间构造和无参构造 1.3 仿函数的介绍和使用 1.4 完整priority_queue代码: 1.5 相关笔试选择题 答案: 2. 反向迭代器 2.1 反向迭代器的普通实现 reverse_iterator.h(不对称版) 2.2 反向迭代器的对称实现 reverse_iterator.

    2024年02月10日
    浏览(49)
  • 【c++迭代器模拟实现】

    打怪升级:第52天 什么是STL STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许

    2024年02月02日
    浏览(37)
  • C++ stl迭代器的理解

    首先,stl采用了泛型编程,分成了容器和算法,容器和算法之间的桥梁是迭代器,迭代器的作用是可以让算法不区分容器来作用在数据上。 迭代器本质上是指针,原有类型(比如int,double等)的指针也可以是迭代器,那如何让代码区分开他们呢? 我们可以把自定义的迭代器包

    2024年02月15日
    浏览(50)
  • 【C++】vector模拟实现+迭代器失效

    铁汁们,今天给大家分享一篇vector模拟实现 + 迭代器失效,来吧,开造⛳️ 指向最后一个空间的下一个位置 💡 iterator _endofstorage 指向存储第一个有效数据空间的位置 💡 iterator _start 指向存储最后一个有效数据空间的下一个位置 💡 iterator _finish 在成员变量声明处给缺省值,

    2024年02月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包