-
Notifications
You must be signed in to change notification settings - Fork 0
/
36_ReverseIterator.cpp
25 lines (23 loc) · 1.1 KB
/
36_ReverseIterator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
template <class Iterator>
class reverse_iterator {
protected:
Iterator current;
public:
typedef typename iterator_traits<Iterator>::iterator_category iterator_category;
typedef typename iterator_traits<Iterator>::value_type value_type;
typedef typename iterator_traits<Iterator>::reference reference;
typedef typename iterator_traits<Iterator>::pointer pointer;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
typedef Iterator iterator_type;
typedef reverse_iterator<Iterator> self;
public:
explicit reverse_iterator(iterator_type x): current(x) {}
reverse_iterator(const self& x): current(x.current) {}
iterator_type base() const { return current; }
reference operator* () const { Iterator tmp=current; return *--tmp; }
pointer operator-> () const { return &(operator*()); }
self& operator++ () { --current; return *this; }
self& operator-- () { ++current; return *this; }
self operator+ (difference_type n) const { return self(current-n); }
self operator- (difference_type n) const { return self(current+n); }
};