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++