| 75 | }; |
| 76 | |
| 77 | class reverse_iterator { |
| 78 | T* ptr; |
| 79 | public: |
| 80 | typedef Diff difference_type; |
| 81 | typedef T value_type; |
| 82 | typedef T* pointer; |
| 83 | typedef T& reference; |
| 84 | typedef std::bidirectional_iterator_tag iterator_category; |
| 85 | reverse_iterator(T* ptr_) : ptr(ptr_) {} |
| 86 | T& operator*() { return *ptr; } |
| 87 | const T& operator*() const { return *ptr; } |
| 88 | T* operator->() { return ptr; } |
| 89 | const T* operator->() const { return ptr; } |
| 90 | reverse_iterator& operator--() { ptr++; return *this; } |
| 91 | reverse_iterator& operator++() { ptr--; return *this; } |
| 92 | reverse_iterator operator++(int) { reverse_iterator copy(*this); ++(*this); return copy; } |
| 93 | reverse_iterator operator--(int) { reverse_iterator copy(*this); --(*this); return copy; } |
| 94 | bool operator==(reverse_iterator x) const { return ptr == x.ptr; } |
| 95 | bool operator!=(reverse_iterator x) const { return ptr != x.ptr; } |
| 96 | }; |
| 97 | |
| 98 | class const_iterator { |
| 99 | const T* ptr; |