# std::reverse_iterator< _Iterator > Class Template Reference

`#include <stl_iterator.h>`

Inheritance diagram for std::reverse_iterator< _Iterator >:

[legend]
Collaboration diagram for std::reverse_iterator< _Iterator >:

[legend]
List of all members.

## Public Types

typedef iterator_traits< _Iterator >::difference_type | difference_type
| Distance between iterators is represented as this type.
typedef iterator_traits< _Iterator >::reference | reference
| This type represents a reference-to-value_type.
typedef iterator_traits< _Iterator >::pointer | pointer
| This type represents a pointer-to-value_type.

## Public Methods

| reverse_iterator ()
| reverse_iterator (iterator_type __x)
| reverse_iterator (const reverse_iterator &__x)
template<typename _Iter> | reverse_iterator (const reverse_iterator< _Iter > &__x)
iterator_type | base () const
reference | operator * () const
pointer | operator-> () const
reverse_iterator & | operator++ ()
reverse_iterator | operator++ (int)
reverse_iterator & | operator-- ()
reverse_iterator | operator-- (int)
reverse_iterator | operator+ (difference_type __n) const
reverse_iterator & | operator+= (difference_type __n)
reverse_iterator | operator- (difference_type __n) const
reverse_iterator & | operator-= (difference_type __n)
reference | operator[] (difference_type __n) const

## Detailed Description

### template<typename _Iterator>
class std::reverse_iterator< _Iterator >

"Bidirectional and random access iterators have corresponding reverse %iterator adaptors that iterate through the data structure in the opposite direction. They have the same signatures as the corresponding iterators. The fundamental relation between a reverse %iterator and its corresponding %iterator `i` is established by the identity:

          &*(reverse_iterator(i)) == &*(i - 1)

This mapping is dictated by the fact that while there is always a pointer past the end of an array, there might not be a valid pointer before the beginning of an array." [24.4.1]/1,2

Reverse iterators can be tricky and surprising at first. Their semantics make sense, however, and the trickiness is a side effect of the requirement that the iterators must be safe.

Definition at line 90 of file stl_iterator.h.

## Member Typedef Documentation

template<typename _Iterator>
typedef iterator_traits<_Iterator>::difference_type std::reverse_iterator< _Iterator >::difference_type

| Distance between iterators is represented as this type. Reimplemented from std::iterator< iterator_traits< _Iterator >::iterator_category, iterator_traits< _Iterator >::value_type, iterator_traits< _Iterator >::difference_type, iterator_traits< _Iterator >::pointer, iterator_traits< _Iterator >::reference > . Definition at line 103 of file stl_iterator.h.

template<typename _Iterator>
typedef iterator_traits<_Iterator>::pointer std::reverse_iterator< _Iterator >::pointer

| This type represents a pointer-to-value_type. Reimplemented from std::iterator< iterator_traits< _Iterator >::iterator_category, iterator_traits< _Iterator >::value_type, iterator_traits< _Iterator >::difference_type, iterator_traits< _Iterator >::pointer, iterator_traits< _Iterator >::reference > . Definition at line 105 of file stl_iterator.h.

template<typename _Iterator>
typedef iterator_traits<_Iterator>::reference std::reverse_iterator< _Iterator >::reference

| This type represents a reference-to-value_type. Reimplemented from std::iterator< iterator_traits< _Iterator >::iterator_category, iterator_traits< _Iterator >::value_type, iterator_traits< _Iterator >::difference_type, iterator_traits< _Iterator >::pointer, iterator_traits< _Iterator >::reference > . Definition at line 104 of file stl_iterator.h.

## Constructor & Destructor Documentation

template<typename _Iterator>
std::reverse_iterator< _Iterator >::reverse_iterator | ( |  | ) | `[inline]`

| The default constructor gives an undefined state to this %iterator. Definition at line 111 of file stl_iterator.h. Referenced by std::reverse_iterator< _Iterator >::operator+() , and std::reverse_iterator< _Iterator >::operator-() .

template<typename _Iterator>
std::reverse_iterator< _Iterator >::reverse_iterator | ( | iterator_type | __x | ) | `[inline, explicit]`

| This %iterator will move in the opposite direction that `x` does. Definition at line 117 of file stl_iterator.h.

template<typename _Iterator>
std::reverse_iterator< _Iterator >::reverse_iterator | ( | const reverse_iterator< _Iterator > & | __x | ) | `[inline]`

| The copy constructor is normal. Definition at line 122 of file stl_iterator.h.

template<typename _Iterator>
template<typename _Iter>
std::reverse_iterator< _Iterator >::reverse_iterator | ( | const reverse_iterator< _Iter > & | __x | ) | `[inline]`

| A reverse_iterator across other types can be copied in the normal fashion. Definition at line 130 of file stl_iterator.h. References std::reverse_iterator< _Iterator >::base() .

## Member Function Documentation

template<typename _Iterator>
iterator_type std::reverse_iterator< _Iterator >::base | ( |  | ) | const`[inline]`

Returns:
  `current,` the %iterator used for underlying work.

Definition at line 137 of file stl_iterator.h.

Referenced by std::operator+() , std::operator-() , std::operator==() , and std::reverse_iterator< _Iterator >::reverse_iterator() .

template<typename _Iterator>
reference std::reverse_iterator< _Iterator >::operator * | ( |  | ) | const`[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 145 of file stl_iterator.h.

Referenced by std::reverse_iterator< _Iterator >::operator->() .

template<typename _Iterator>
reverse_iterator std::reverse_iterator< _Iterator >::operator+ | ( | difference_type | __n | ) | const`[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 214 of file stl_iterator.h.

References std::reverse_iterator< _Iterator >::reverse_iterator() .

template<typename _Iterator>
reverse_iterator std::reverse_iterator< _Iterator >::operator++ | ( | int |  | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 177 of file stl_iterator.h.

template<typename _Iterator>
reverse_iterator& std::reverse_iterator< _Iterator >::operator++ | ( |  | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 165 of file stl_iterator.h.

template<typename _Iterator>
reverse_iterator& std::reverse_iterator< _Iterator >::operator+= | ( | difference_type | __n | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 223 of file stl_iterator.h.

template<typename _Iterator>
reverse_iterator std::reverse_iterator< _Iterator >::operator- | ( | difference_type | __n | ) | const`[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 235 of file stl_iterator.h.

References std::reverse_iterator< _Iterator >::reverse_iterator() .

template<typename _Iterator>
reverse_iterator std::reverse_iterator< _Iterator >::operator-- | ( | int |  | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 201 of file stl_iterator.h.

template<typename _Iterator>
reverse_iterator& std::reverse_iterator< _Iterator >::operator-- | ( |  | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 190 of file stl_iterator.h.

template<typename _Iterator>
reverse_iterator& std::reverse_iterator< _Iterator >::operator-= | ( | difference_type | __n | ) | `[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 244 of file stl_iterator.h.

template<typename _Iterator>
pointer std::reverse_iterator< _Iterator >::operator-> | ( |  | ) | const`[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 157 of file stl_iterator.h.

References std::reverse_iterator< _Iterator >::operator *() .

template<typename _Iterator>
reference std::reverse_iterator< _Iterator >::operator[] | ( | difference_type | __n | ) | const`[inline]`

Returns:
  TODO

Todo:
  Doc me! See docs/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more.

Definition at line 256 of file stl_iterator.h.

The documentation for this class was generated from the following file:

- stl_iterator.h