| 126 | }; |
| 127 | |
| 128 | class const_reverse_iterator { |
| 129 | const T* ptr; |
| 130 | public: |
| 131 | typedef Diff difference_type; |
| 132 | typedef const T value_type; |
| 133 | typedef const T* pointer; |
| 134 | typedef const T& reference; |
| 135 | typedef std::bidirectional_iterator_tag iterator_category; |
| 136 | const_reverse_iterator(const T* ptr_) : ptr(ptr_) {} |
| 137 | const_reverse_iterator(reverse_iterator x) : ptr(&(*x)) {} |
| 138 | const T& operator*() const { return *ptr; } |
| 139 | const T* operator->() const { return ptr; } |
| 140 | const_reverse_iterator& operator--() { ptr++; return *this; } |
| 141 | const_reverse_iterator& operator++() { ptr--; return *this; } |
| 142 | const_reverse_iterator operator++(int) { const_reverse_iterator copy(*this); ++(*this); return copy; } |
| 143 | const_reverse_iterator operator--(int) { const_reverse_iterator copy(*this); --(*this); return copy; } |
| 144 | bool operator==(const_reverse_iterator x) const { return ptr == x.ptr; } |
| 145 | bool operator!=(const_reverse_iterator x) const { return ptr != x.ptr; } |
| 146 | }; |
| 147 | |
| 148 | private: |
| 149 | #pragma pack(push, 1) |