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);
		}

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

原因:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值