前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反向迭代器

反向迭代器

作者头像
code-child
发布2023-05-30 11:20:19
1410
发布2023-05-30 11:20:19
举报
文章被收录于专栏:codechildcodechild

反向迭代器

我们在实现正向迭代器的时候,它的++是下一个元素,--为上一个元素。对于反向迭代器它就是相反的,++为上一个元素,--为下一个元素 反向迭代器是复用了正向迭代器iterator

代码语言:javascript
复制
cpptemplate <class Iterator,class Ref,class Ptr>
class __reverse_iterator
{
	Iterator _it;
	typedef __reverse_iterator<Iterator, Ref, Ptr> Self;
public:
	__reverse_iterator(Iterator it)
		:_it(it){}
	Self& operator++()
	{
		--_it;
		return *this;
	}
	Self& operator++(int)
	{
		Iterator temp(_it);
		--_it;
		return Slef(temp);
	}
	Self& operator--()
	{
		++_it;
		return *this;
	}
	Self& operator--(int)
	{
		Iterator temp(_it);
		++_it;
		return Slef(temp);
	}
	Ref operator*()
	{
		Iterator temp(_it);
		return *(--temp);
	}
	Ptr operator->()
	{
		//return &(*_it);不能这样写,因为我们要访问当前节点的前一个数据
		return &(operator*());
	}
	bool operator==(const Self& it)
	{
		return _it == it._it;
	}
	bool operator!=(const Self& it)
	{
		return _it != it._it;
	}
};

list反向迭代器的使用

代码语言:javascript
复制
cpp	typedef __reverse_iterator<iterator, T&, T*> reserve_iterator;
	typedef __reverse_iterator<const_iterator, const T&, const T*> const_reserve_iterator;

	reserve_iterator rbegin()
	{
		return reserve_iterator(end());
	}
	reserve_iterator rend()
	{
		return reserve_iterator(begin());
	}
	const_reserve_iterator rbegin()const
	{
		return reserve_iterator(end());
	}
	const_reserve_iterator rend()const
	{
		return reserve_iterator(begin());
	}

反向迭代器的头为为正向迭代器的尾,正向迭代器的尾为反向迭代器的头,所以我们设计反向迭代器的时候在访问里面数据的时候,需要访问当前节点的后一个节点的值。 因为反向迭代器的头为尾,里面不是有效数据,这样设置的目的是为了和正向迭代器保持对称。

vector的反向迭代器

代码语言:javascript
复制
cpp	typedef __reverse_iterator<iterator, T&, T*> reverse_iterator;
	typedef __reverse_iterator<iterator, const T&, const T*> const_reverse_iterator;

	reverse_iterator rbegin()
	
	{
		return reverse_iterator(end());
	}
	const_reverse_iterator rbegin()const
	{
		return reverse_iterator(end());
	}
	reverse_iterator rend()
	{
		return reverse_iterator(begin());
	}
	const_reverse_iterator rend()const
	{
		return reverse_iterator(begin());
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-26c,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 反向迭代器
  • list反向迭代器的使用
  • vector的反向迭代器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档