template<class Iterator, class Ref, class Ptr>
struct Reverse_iterator
{
typedef Reverse_iterator<Iterator, Ref, Ptr> self;
Reverse_iterator(Iterator it)
:_it(it)
{}
Iterator _it;
self& operator++()
{
--_it;
return *this;
}
self& operator++(int)
{
Reverse_iterator tmp(_it);
_it--;
return tmp;
}
self& operator--()
{
++_it;
return *this;
}
self& operator--(int)
{
Reverse_iterator tmp(_it);
_it++;
return tmp;
}
Ref operator*()
{
auto tmp = _it;
--tmp;
return *tmp;
}
bool operator!=(const self& sl)
{
return _it != sl._it;
}
};
反向迭代器在正向迭代器的基础上进行反向操作!
反向的 ++ 就是正向的 -- 。
利用模板,实现反向迭代器对正向的套用。