1.迭代器适配器reverse_iterator
template <class _Iterator>
class reverse_iterator
{
protected:
_Iterator current; //对应之正向迭代器
public:
//逆向迭代器的5种associated types都和其相对应
iterator_category;
typedef typename iterator_traits<_Iterator>::value_type
value_type;
typedef typename iterator_traits<_Iterator>::difference_type
difference_type;
typedef typename iterator_traits<_Iterator>::pointer
pointer;
typedef typename iterator_traits<_Iterator>::reference
reference;
typedef _Iterator iterator_type; //代表正向迭代器
typedef reverse_iterator<_Iterator> _Self; //代表逆向迭代器
public:
reverse_iterator() {}
explicit reverse_iterator(iterator_type __x) : current(__x) {}
reverse_iterator(const _Self& __x) : current(__x.current) {}
#ifdef __STL_MEMBER_TEMPLATES
template <class _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
: current(__x.base()) {}
#endif /* __STL_MEMBER_TEMPLATES */
iterator_type base() const { return current; } //取出对应的正向迭代器
//对逆向迭代器取值,就是将对应之正向迭代器退一位取值
_Iterator __tmp = current;
return *--__tmp;
}
#ifndef __SGI_STL_NO_ARROW_OPERATOR
pointer operator->() const { return &(operator*()); }
#endif /* __SGI_STL_NO_ARROW_OPERATOR */
//前进变后退,后退变成前进
-- current;
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
-- current;
return __tmp;
}
_Self& operator--() {
++ current;
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
++ current;
return __tmp;
}
_Self operator+(difference_type __n) const {
return _Self( current - __n);
}
_Self& operator+=(difference_type __n) {
current -= __n;
return *this;
}
_Self operator-(difference_type __n) const {
return _Self( current + __n);
}
_Self& operator-=(difference_type __n) {
current += __n;
return *this;
}
reference operator[](difference_type __n) const { return *(*this + __n); }
};
2.rbegin,rend
reverse_iterator rbegin() { return reverse_iterator(end()); }
reverse_iterator rend() { return reverse_iterator(begin()); }