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);
}
它返回的并非当前所指向的对象,而且上一个对象
原因: