反向迭代器不难 但是有些地方还是需要注意一下
1.迭代器的rebegin()是在最后一个元素的末尾(和正向迭代器保持一致)
2.因此反向迭代器的解引用是解引用当前位置前一个位置的元素
3.反向迭代器的++相当于正向迭代器的-- 反向迭代器的--相当于正向迭代器的++
4.这个反向迭代器是适用于不同容器的
#pragma once
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;
}
};
}