反向迭代器不难 但是有些地方还是需要注意一下
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;}};
}