| 47 | typedef const value_type* const_pointer; |
| 48 | |
| 49 | class iterator { |
| 50 | T* ptr; |
| 51 | public: |
| 52 | typedef Diff difference_type; |
| 53 | typedef T value_type; |
| 54 | typedef T* pointer; |
| 55 | typedef T& reference; |
| 56 | typedef std::random_access_iterator_tag iterator_category; |
| 57 | iterator(T* ptr_) : ptr(ptr_) {} |
| 58 | T& operator*() const { return *ptr; } |
| 59 | T* operator->() const { return ptr; } |
| 60 | T& operator[](size_type pos) { return ptr[pos]; } |
| 61 | const T& operator[](size_type pos) const { return ptr[pos]; } |
| 62 | iterator& operator++() { ptr++; return *this; } |
| 63 | iterator& operator--() { ptr--; return *this; } |
| 64 | iterator operator++(int) { iterator copy(*this); ++(*this); return copy; } |
| 65 | iterator operator--(int) { iterator copy(*this); --(*this); return copy; } |
| 66 | difference_type friend operator-(iterator a, iterator b) { return (&(*a) - &(*b)); } |
| 67 | iterator operator+(size_type n) { return iterator(ptr + n); } |
| 68 | iterator& operator+=(size_type n) { ptr += n; return *this; } |
| 69 | iterator operator-(size_type n) { return iterator(ptr - n); } |
| 70 | iterator& operator-=(size_type n) { ptr -= n; return *this; } |
| 71 | bool operator==(iterator x) const { return ptr == x.ptr; } |
| 72 | bool operator!=(iterator x) const { return ptr != x.ptr; } |
| 73 | bool operator>=(iterator x) const { return ptr >= x.ptr; } |
| 74 | bool operator<=(iterator x) const { return ptr <= x.ptr; } |
| 75 | bool operator>(iterator x) const { return ptr > x.ptr; } |
| 76 | bool operator<(iterator x) const { return ptr < x.ptr; } |
| 77 | }; |
| 78 | |
| 79 | class reverse_iterator { |
| 80 | T* ptr; |