Compartir a través de


reverse_iterator (Clase)

La plantilla de clase es un adaptador de iterador que describe un objeto iterador inverso con el comportamiento de un iterador de acceso aleatorio o bidireccional, pero en orden inverso. Habilita el recorrido hacia atrás de un intervalo.

Sintaxis

template <class RandomIterator>
class reverse_iterator

Parámetros

RandomIterator El tipo que representa el iterador que se adaptará para trabajar en orden inverso.

Comentarios

Los contenedores existentes en la Biblioteca estándar de C++ también definen los tipos reverse_iterator y const_reverse_iterator, y tienen las funciones miembro rbegin y rend que devuelven iteradores inversos. Estos iteradores tienen semántica de sobrescritura. El adaptador reverse_iterator complementa esta funcionalidad porque proporciona semántica de inserción y también se puede usar con flujos.

El reverse_iterator que requiere un iterador bidireccional no deben llamar a ninguna de las funciones miembro operator+=, operator+, operator-=, operator- o operator[], que solo se pueden usar con iteradores de acceso aleatorio.

El intervalo de un iterador es [first, last), donde el corchete izquierdo indica la inclusión de first y el paréntesis derecho indica la inclusión de elementos hasta last, pero con la exclusión de este. Los mismos elementos están incluidos en la secuencia inversa [ rev - first, rev - last) de manera que, si last el elemento siguiente al elemento final de una secuencia, entonces el primer elemento rev - first de la secuencia inversa apunta a *(last - 1). La identidad que relaciona todos los iteradores inversos con sus iteradores subyacentes es:

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

En la práctica esto significa que, en la secuencia inversa, reverse_iterator hará referencia al elemento situado una posición más allá (a la derecha) del elemento al que el iterador se había referido en la secuencia original. Así pues, si un iterador señaló el elemento 6 en la secuencia (2, 4, 6, 8), entonces reverse_iterator señalará el elemento 4 en la secuencia inversa (8, 6, 4, 2).

Constructores

Constructor Descripción
reverse_iterator Construye un reverse_iterator predeterminado o un reverse_iterator a partir de un iterador subyacente.

Typedefs

Nombre de tipo Descripción
difference_type Tipo que proporciona la diferencia entre dos reverse_iterator que hacen referencia a elementos del mismo contenedor.
iterator_type Tipo que proporciona el iterador subyacente para reverse_iterator.
pointer Tipo que proporciona un puntero a un elemento direccionado por reverse_iterator.
referencia Tipo que proporciona una referencia a un elemento direccionado por reverse_iterator.

Funciones miembro

Función de miembro Descripción
base Recupera el iterador subyacente de su reverse_iterator.

Operadores

Operador Descripción
operator_star Devuelve el elemento que direcciona un reverse_iterator.
operator+ Agrega un desplazamiento a un iterador y devuelve el nuevo reverse_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.
operator++ Incrementa el reverse_iterator al elemento siguiente.
operator+= Agrega un desplazamiento especificado desde un reverse_iterator.
operator- Resta un desplazamiento a reverse_iterator y devuelve un reverse_iterator que señala el elemento en la posición desplazada.
operador-- Disminuye el reverse_iterator al elemento anterior.
operator-= Resta un desplazamiento especificado a un reverse_iterator.
operator-> Devuelve un puntero al elemento direccionado por reverse_iterator.
operator[] Devuelve una referencia a un desplazamiento de elemento con respecto al elemento direccionado por reverse_iterator un número especificado de posiciones.

Requisitos

Encabezado:<iterator>

Espacio de nombres: std

reverse_iterator::base

Recupera el iterador subyacente de su reverse_iterator.

RandomIterator base() const;

Valor devuelto

El iterador subyacente de reverse_iterator.

Comentarios

La identidad que relaciona todos los iteradores inversos con sus iteradores subyacentes es:

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

En la práctica esto significa que, en la secuencia inversa, el reverse_iterator hará referencia al elemento situado una posición más allá (a la derecha) del elemento al que el iterador se había referido en la secuencia original. Así pues, si un iterador señaló el elemento 6 en la secuencia (2, 4, 6, 8), entonces reverse_iterator señalará el elemento 4 en la secuencia inversa (8, 6, 4, 2).

Ejemplo

// reverse_iterator_base.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   vector <int>::iterator pos, bpos;
   pos = find ( vec.begin ( ), vec.end ( ), 6 );
   cout << "The iterator pos points to: " << *pos << "." << endl;

   typedef reverse_iterator<vector<int>::iterator>::iterator_type it_vec_int_type;

   reverse_iterator<it_vec_int_type> rpos ( pos );
   cout << "The reverse_iterator rpos points to: " << *rpos
        << "." << endl;

   bpos = rpos.base ( );
   cout << "The iterator underlying rpos is bpos & it points to: "
        << *bpos << "." << endl;
}

reverse_iterator::d ifference_type

Tipo que proporciona la diferencia entre dos reverse_iterator que hacen referencia a elementos del mismo contenedor.

typedef typename iterator_traits<RandomIterator>::difference_type  difference_type;

Comentarios

El tipo de diferencia reverse_iterator es el mismo que el tipo de diferencia del iterador.

El tipo es un sinónimo del nombre de tipo de rasgo del iterador iterator_traits<RandomIterator>::pointer.

Ejemplo

Vea reverse_iterator::operator[] para obtener un ejemplo de cómo declarar y usar difference_type.

reverse_iterator::iterator_type

Tipo que proporciona el iterador subyacente para reverse_iterator.

typedef RandomIterator iterator_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla Iterator.

Ejemplo

Vea reverse_iterator::base para obtener un ejemplo de cómo declarar y usar iterator_type.

reverse_iterator::operator*

Devuelve el elemento al que se dirige un iterador reverse_iterator.

reference operator*() const;

Valor devuelto

El valor de los elementos a los que se dirige el reverse_iterator.

Comentarios

El operador devuelve *( current - 1).

Ejemplo

// reverse_iterator_op_ref.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   vector <int>::iterator pos, bpos;
   pos = find ( vec.begin ( ), vec.end ( ), 6 );

   // Declare a difference type for a parameter
   // declare a reference return type
   reverse_iterator<vector<int>::iterator>::reference refpos = *pos;
   cout << "The iterator pos points to: " << refpos << "." << endl;
}

reverse_iterator::operator+

Agrega un desplazamiento a un iterador y devuelve el nuevo reverse_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.

reverse_iterator<RandomIterator> operator+(difference_type Off) const;

Parámetros

Desactivado
El desplazamiento que se agregará al iterador inverso.

Valor devuelto

Un reverse_iterator que se dirige al elemento de desplazamiento.

Comentarios

Solo se puede usar esta función miembro si el reverse_iterator cumple los requisitos de un iterador de acceso aleatorio.

Ejemplo

// reverse_iterator_op_add.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the first element
   vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( );

   cout << "The iterator rVPOS1 initially points to the first "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;

   vector <int>::reverse_iterator rVPOS2 =rVPOS1 + 2; // offset added
   cout << "After the +2 offset, the iterator rVPOS2 points\n"
        << " to the 3rd element in the reversed sequence: "
        << *rVPOS2 << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
After the +2 offset, the iterator rVPOS2 points
to the 3rd element in the reversed sequence: 6.

reverse_iterator::operator++

Incrementa el reverse_iterator al elemento anterior.

reverse_iterator<RandomIterator>& operator++();
reverse_iterator<RandomIterator> operator++(int);

Valor devuelto

El primer operador devuelve el reverse_iterator preincrementado y el segundo, el operador de postincremento, devuelve una copia del reverse_iterator incrementado.

Comentarios

Solo se puede usar esta función miembro si el reverse_iterator cumple los requisitos de un iterador bidireccional.

Ejemplo

// reverse_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i - 1 );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the last element
   vector <int>::reverse_iterator rVPOS1 = vec.rbegin( );

   cout << "The iterator rVPOS1 initially points to the first "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;

   rVPOS1++;  // postincrement, preincrement: ++rVPSO1

   cout << "After incrementing, the iterator rVPOS1 points\n"
        << " to the second element in the reversed sequence: "
        << *rVPOS1 << "." << endl;
}
The vector vec is: ( 1 3 5 7 9 ).
The vector vec reversed is: ( 9 7 5 3 1 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 9.
After incrementing, the iterator rVPOS1 points
to the second element in the reversed sequence: 7.

reverse_iterator::operator+=

Agrega un desplazamiento especificado desde un reverse_iterator.

reverse_iterator<RandomIterator>& operator+=(difference_type Off);

Parámetros

Desactivado
El desplazamiento en el que se incrementa el iterador.

Valor devuelto

Una referencia al elemento al que se dirige el reverse_iterator.

Ejemplo

// reverse_iterator_op_addoff.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i );
   }

   vector <int>::iterator vIter;

   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the last element
   vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( );

   cout << "The iterator rVPOS1 initially points to the first "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;

   rVPOS1+=2;   // addition of an offset
   cout << "After the +2 offset, the iterator rVPOS1 now points\n"
        << " to the third element in the reversed sequence: "
        << *rVPOS1 << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
After the +2 offset, the iterator rVPOS1 now points
to the third element in the reversed sequence: 6.

reverse_iterator::operator-

Resta un desplazamiento a reverse_iterator y devuelve un reverse_iterator que señala el elemento en la posición desplazada.

reverse_iterator<RandomIterator> operator-(difference_type Off) const;

Parámetros

Desactivado
El desplazamiento que se restará del reverse_iterator.

Valor devuelto

Un reverse_iterator que se dirige al elemento de desplazamiento.

Comentarios

Solo se puede usar esta función miembro si el reverse_iterator cumple los requisitos de un iterador de acceso aleatorio.

Ejemplo

// reverse_iterator_op_sub.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 3 * i );
   }

   vector <int>::iterator vIter;

   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the first element
   vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;

   cout << "The iterator rVPOS1 initially points to the last "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;

   vector <int>::reverse_iterator rVPOS2 =rVPOS1 - 2; // offset subtracted
   cout << "After the -2 offset, the iterator rVPOS2 points\n"
        << " to the 2nd element from the last in the reversed sequence: "
        << *rVPOS2 << "." << endl;
}
The vector vec is: ( 3 6 9 12 15 ).
The vector vec reversed is: ( 15 12 9 6 3 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 3.
After the -2 offset, the iterator rVPOS2 points
to the 2nd element from the last in the reversed sequence: 9.

reverse_iterator::operator-

Disminuye el reverse_iterator al elemento anterior.

reverse_iterator<RandomIterator>& operator--();
reverse_iterator<RandomIterator> operator--(int);

Valor devuelto

El primer operador devuelve el reverse_iterator prereducido y el segundo, el operador de posdecremento, devuelve una copia del reverse_iterator reducido.

Comentarios

Solo se puede usar esta función miembro si el reverse_iterator cumple los requisitos de un iterador bidireccional.

Ejemplo

// reverse_iterator_op_decr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i - 1 );
   }

   vector <int>::iterator vIter;

   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the first element
   vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;

   cout << "The iterator rVPOS1 initially points to the last "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;
   rVPOS1--;  // postdecrement, predecrement: --rVPSO1

   cout << "After the decrement, the iterator rVPOS1 points\n"
        << " to the next-to-last element in the reversed sequence: "
        << *rVPOS1 << "." << endl;
}
The vector vec is: ( 1 3 5 7 9 ).
The vector vec reversed is: ( 9 7 5 3 1 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 1.
After the decrement, the iterator rVPOS1 points
to the next-to-last element in the reversed sequence: 3.

reverse_iterator::operator-=

Resta un desplazamiento especificado a un reverse_iterator.

reverse_iterator<RandomIterator>& operator-=(difference_type Off);

Parámetros

Desactivado
El desplazamiento que se restará del reverse_iterator.

Comentarios

Solo se puede usar esta función miembro si el reverse_iterator cumple los requisitos de un iterador de acceso aleatorio.

El operador evalúa current + Off y devuelve *this.

Ejemplo

// reverse_iterator_op_suboff.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 3 * i );
   }

   vector <int>::iterator vIter;

   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   // Initializing reverse_iterators to the first element
   vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;

   cout << "The iterator rVPOS1 initially points to the last "
        << "element\n in the reversed sequence: "
        << *rVPOS1 << "." << endl;

   rVPOS1-=2;      // Subtraction of an offset
   cout << "After the -2 offset, the iterator rVPOS1 now points\n"
        << " to the 2nd element from the last in the reversed sequence: "
        << *rVPOS1 << "." << endl;
}
The vector vec is: ( 3 6 9 12 15 ).
The vector vec reversed is: ( 15 12 9 6 3 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 3.
After the -2 offset, the iterator rVPOS1 now points
to the 2nd element from the last in the reversed sequence: 9.

reverse_iterator::operator->

Devuelve un puntero al elemento direccionado por reverse_iterator.

pointer operator->() const;

Valor devuelto

Un puntero al elemento al que se dirige el reverse_iterator.

Comentarios

El operador devuelve &**this.

Ejemplo

// reverse_iterator_ptrto.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>

int main( )
{
   using namespace std;

   typedef vector<pair<int,int> > pVector;
   pVector vec;
   vec.push_back(pVector::value_type(1,2));
   vec.push_back(pVector::value_type(3,4));
   vec.push_back(pVector::value_type(5,6));

   pVector::iterator pvIter;
   cout << "The vector vec of integer pairs is:\n( ";
   for ( pvIter = vec.begin ( ) ; pvIter != vec.end ( ); pvIter++)
      cout << "( " << pvIter -> first << ", " << pvIter -> second << ") ";
   cout << ")" << endl << endl;

   pVector::reverse_iterator rpvIter;
   cout << "The vector vec reversed is:\n( ";
   for ( rpvIter = vec.rbegin( ) ; rpvIter != vec.rend( ); rpvIter++ )
      cout << "( " << rpvIter -> first << ", " << rpvIter -> second << ") ";
   cout << ")" << endl << endl;

   pVector::iterator pos = vec.begin ( );
   pos++;
   cout << "The iterator pos points to:\n( " << pos -> first << ", "
   << pos -> second << " )" << endl << endl;

   pVector::reverse_iterator rpos (pos);

   // Use operator -> with return type: why type int and not int*
   int fint = rpos -> first;
   int sint = rpos -> second;

   cout << "The reverse_iterator rpos points to:\n( " << fint << ", "
   << sint << " )" << endl;
}
The vector vec of integer pairs is:
( ( 1, 2) ( 3, 4) ( 5, 6) )

The vector vec reversed is:
( ( 5, 6) ( 3, 4) ( 1, 2) )

The iterator pos points to:
( 3, 4 )

The reverse_iterator rpos points to:
( 1, 2 )

reverse_iterator::operator[]

Devuelve una referencia a un desplazamiento de elemento con respecto al elemento direccionado por reverse_iterator un número especificado de posiciones.

reference operator[](difference_type Off) const;

Parámetros

Desactivado
El desplazamiento desde la dirección del reverse_iterator.

Valor devuelto

La referencia al desplazamiento del elemento.

Comentarios

El operador devuelve *( *this + Off).

Ejemplo

// reverse_iterator_ret_ref.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( 2 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   vector <int>::iterator pos;
   pos = find ( vec.begin ( ), vec.end ( ), 8 );
   reverse_iterator<vector<int>::iterator> rpos ( pos );

   // Declare a difference type for a parameter
   reverse_iterator<vector<int>::iterator>::difference_type diff = 2;

   cout << "The iterator pos points to: " << *pos << "." << endl;
   cout << "The iterator rpos points to: " << *rpos << "." << endl;

   // Declare a reference return type & use operator[]
   reverse_iterator<vector<int>::iterator>::reference refrpos = rpos [diff];
   cout << "The iterator rpos now points to: " << refrpos << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator pos points to: 8.
The iterator rpos points to: 6.
The iterator rpos now points to: 2.

reverse_iterator::p ointer

Tipo que proporciona un puntero a un elemento direccionado por reverse_iterator.

typedef typename iterator_traits<RandomIterator>::pointer pointer;

Comentarios

El tipo es un sinónimo del nombre de tipo de rasgo del iterador iterator_traits<RandomIterator>::pointer.

Ejemplo

// reverse_iterator_pointer.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>

int main( )
{
   using namespace std;

   typedef vector<pair<int,int> > pVector;
   pVector vec;
   vec.push_back( pVector::value_type( 1,2 ) );
   vec.push_back( pVector::value_type( 3,4 ) );
   vec.push_back( pVector::value_type( 5,6 ) );

   pVector::iterator pvIter;
   cout << "The vector vec of integer pairs is:\n" << "( ";
   for ( pvIter = vec.begin ( ) ; pvIter != vec.end ( ); pvIter++)
      cout << "( " << pvIter -> first << ", " << pvIter -> second << ") ";
   cout << ")" << endl;

   pVector::reverse_iterator rpvIter;
   cout << "\nThe vector vec reversed is:\n" << "( ";
   for ( rpvIter = vec.rbegin( ) ; rpvIter != vec.rend( ); rpvIter++)
      cout << "( " << rpvIter -> first << ", " << rpvIter -> second << ") ";
   cout << ")" << endl;

   pVector::iterator pos = vec.begin ( );
   pos++;
   cout << "\nThe iterator pos points to:\n"
        << "( " << pos -> first << ", "
        << pos -> second << " )" << endl;

   pVector::reverse_iterator rpos (pos);
   cout << "\nThe iterator rpos points to:\n"
        << "( " << rpos -> first << ", "
        << rpos -> second << " )" << endl;
}
The vector vec of integer pairs is:
( ( 1, 2) ( 3, 4) ( 5, 6) )

The vector vec reversed is:
( ( 5, 6) ( 3, 4) ( 1, 2) )

The iterator pos points to:
( 3, 4 )

The iterator rpos points to:
( 1, 2 )

reverse_iterator::reference

Un tipo que proporciona una referencia a un elemento al que se dirige un reverse_iterator.

typedef typename iterator_traits<RandomIterator>::reference reference;

Comentarios

El tipo es un sinónimo del rasgo de iterador iterator_traits<RandomIterator>::reference.

Ejemplo

Vea reverse_iterator::operator[] o reverse_iterator::operator* para obtener ejemplos de cómo declarar y usar reference.

reverse_iterator::reverse_iterator

Construye un reverse_iterator predeterminado o un reverse_iterator a partir de un iterador subyacente.

reverse_iterator();
explicit reverse_iterator(RandomIterator right);

template <class Type>
reverse_iterator(const reverse_iterator<Type>& right);

Parámetros

right
El iterador que se va a adaptar a un reverse_iterator.

Valor devuelto

Un reverse_iterator predeterminado o un reverse_iterator que adapta un iterador subyacente.

Comentarios

La identidad que relaciona todos los iteradores inversos con sus iteradores subyacentes es:

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

En la práctica esto significa que, en la secuencia inversa, reverse_iterator hará referencia al elemento situado una posición más allá (a la derecha) del elemento al que el iterador se había referido en la secuencia original. Así pues, si un iterador señaló el elemento 6 en la secuencia (2, 4, 6, 8), entonces reverse_iterator señalará el elemento 4 en la secuencia inversa (8, 6, 4, 2).

Ejemplo

// reverse_iterator_reverse_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 6 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   vector <int>::reverse_iterator rvIter;
   cout << "The vector vec reversed is: ( ";
   for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
      cout << *rvIter << " ";
   cout << ")." << endl;

   vector <int>::iterator pos;
   pos = find ( vec.begin ( ), vec.end ( ), 4 );
   cout << "The iterator pos = " << *pos << "." << endl;

   vector <int>::reverse_iterator rpos ( pos );
   cout << "The reverse_iterator rpos = " << *rpos
        << "." << endl;
}

Vea también

<iterator>
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++