Classe reverse_iterator
O modelo de classe é um adaptador de iterador que descreve um objeto de iterador reverso que se comporta como um iterador de acesso aleatório ou bidirecional, apenas ao contrário. Ela permite a travessia regressiva de um intervalo.
Sintaxe
template <class RandomIterator>
class reverse_iterator
Parâmetros
RandomIterator O tipo que representa o iterador a ser adaptado para operar em sentido inverso.
Comentários
Os contêineres existentes da Biblioteca Padrão C++ também definem os tipos reverse_iterator
e const_reverse_iterator
e têm funções membro rbegin
e rend
que retornam iteradores inversos. Esses iteradores apresentam semântica de substituição. O adaptador reverse_iterator
complementa essa funcionalidade, pois oferece semântica de inserção e também pode ser usado com fluxos.
O reverse_iterator
que exige um iterador bidirecional não deve chamar nenhuma das funções de membro operator+=
, operator+
, operator-=
, operator-
ou operator[]
, que somente podem ser usadas com iteradores de acesso aleatório.
O intervalo de um iterador é [primeiro, último), em que o colchete à esquerda indica a inclusão do primeiro e o parêntese à direita indica a inclusão de elementos até, mas excluindo, o último. Os mesmos elementos são incluídos na sequência invertida [ rev - primeiro, rev - último) para que se último for um elemento depois do fim em uma sequência, o primeiro elemento rev - primeiro na sequência invertida apontará para *(último - 1). A identidade que relaciona a todos os iteradores inversos a seus iteradores subjacentes é:
&*(reverse_iterator (i)) == &*(i - 1).
Na prática, isso significa que na sequência invertida, reverse_iterator fará referência ao elemento que está uma posição depois (à direita do) do elemento ao qual o iterador se referiu na sequência original. Desse modo, se um iterador tratou o elemento 6 na sequência (2, 4, 6, 8), reverse_iterator
tratará o elemento 4 na sequência inversa (8, 6, 4, 2).
Construtores
Construtor | Descrição |
---|---|
reverse_iterator | Constrói um reverse_iterator padrão ou um reverse_iterator de um iterador subjacente. |
Typedefs
Nome do tipo | Descrição |
---|---|
difference_type | Um tipo que fornece a diferença entre dois reverse_iterator s que se referem a elementos no mesmo contêiner. |
iterator_type | Um tipo que fornece um iterador subjacente para um reverse_iterator . |
pointer | Um tipo que fornece um ponteiro para um elemento tratado por um reverse_iterator . |
referência | Um tipo que fornece uma referência a um elemento tratado por um reverse_iterator . |
Funções de membro
Função de membro | Descrição |
---|---|
base | Recupera o iterador subjacente de seu reverse_iterator . |
Operadores
Operador | Descrição |
---|---|
operator_star | Retorna o elemento tratado por um reverse_iterator . |
operator+ | Adiciona um deslocamento a um iterador e retorna o novo reverse_iterator que trata o elemento inserido na nova posição de deslocamento. |
operador++ | Incrementa o reverse_iterator até o próximo elemento. |
operator+= | Adiciona um deslocamento especificado de um reverse_iterator . |
operator- | Subtrai um deslocamento de um reverse_iterator e retorna um reverse_iterator que trata o elemento na posição do deslocamento. |
operador-- | Decrementa o reverse_iterator para o elemento anterior. |
operador-= | Subtrai um deslocamento especificado de um reverse_iterator . |
operator-> | Retorna um ponteiro para o elemento tratado pelo reverse_iterator . |
operator[] |
Retorna uma referência a um deslocamento do elemento tratado por um reverse_iterator por um número especificado de posições. |
Requisitos
Cabeçalho:<iterator>
Namespace: std
reverse_iterator::base
Recupera o iterador subjacente de seu reverse_iterator
.
RandomIterator base() const;
Valor de retorno
O iterador subjacente a reverse_iterator
.
Comentários
A identidade que relaciona a todos os iteradores inversos a seus iteradores subjacentes é:
&*(reverse_iterator
(i)) == &*(i - 1).
Na prática, isso significa que, na sequência invertida, reverse_iterator
fará referência ao elemento que está uma posição depois (à direita) do elemento ao qual o iterador se referiu na sequência original. Desse modo, se um iterador tratou o elemento 6 na sequência (2, 4, 6, 8), reverse_iterator
tratará o elemento 4 na sequência inversa (8, 6, 4, 2).
Exemplo
// 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 tipo_de_ifferência
Um tipo que fornece a diferença entre dois reverse_iterator
s que se referem a elementos no mesmo contêiner.
typedef typename iterator_traits<RandomIterator>::difference_type difference_type;
Comentários
O tipo de diferença reverse_iterator
é o mesmo que o tipo de diferença do iterador.
O tipo é um sinônimo do typename de característica do iterador iterator_traits
<RandomIterator>::pointer.
Exemplo
Consulte reverse_iterator::operator[]
para um exemplo de como declarar e usar difference_type
.
reverse_iterator::iterator_type
Um tipo que fornece um iterador subjacente para um reverse_iterator
.
typedef RandomIterator iterator_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloIterator
.
Exemplo
Consulte reverse_iterator::base para ver um exemplo de como declarar e usar iterator_type
.
reverse_iterator::operador*
Retorna o elemento que um reverse_iterator aborda.
reference operator*() const;
Valor de retorno
O valor dos elementos abordados pelo reverse_iterator.
Comentários
O operador retorna *( current - 1).
Exemplo
// 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::operador+
Adiciona um deslocamento a um iterador e retorna o novo reverse_iterator
que trata o elemento inserido na nova posição de deslocamento.
reverse_iterator<RandomIterator> operator+(difference_type Off) const;
Parâmetros
Desativado
O deslocamento a ser adicionado ao iterador inverso.
Valor de retorno
Um reverse_iterator
que trata o elemento de deslocamento.
Comentários
Essa função de membro pode ser usada somente se o reverse_iterator
satisfizer os requisitos de um iterador de acesso aleatório.
Exemplo
// 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::operador++
Incrementa o reverse_iterator para o elemento anterior.
reverse_iterator<RandomIterator>& operator++();
reverse_iterator<RandomIterator> operator++(int);
Valor de retorno
O primeiro operador retorna o reverse_iterator
pré-incrementado e o segundo, o operador pós-incrementado, retorna uma cópia do reverse_iterator
incrementado.
Comentários
Essa função de membro só pode ser usada se o reverse_iterator
satisfizer os requisitos de um iterador bidirecional.
Exemplo
// 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::operador+=
Adiciona um deslocamento especificado de um reverse_iterator.
reverse_iterator<RandomIterator>& operator+=(difference_type Off);
Parâmetros
Desativado
O deslocamento pelo qual incrementar o iterador.
Valor de retorno
Uma referência ao elemento tratado pelo reverse_iterator
.
Exemplo
// 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::operador-
Subtrai um deslocamento de um reverse_iterator
e retorna um reverse_iterator
que trata o elemento na posição do deslocamento.
reverse_iterator<RandomIterator> operator-(difference_type Off) const;
Parâmetros
Desativado
O deslocamento a ser subtraído do reverse_iterator.
Valor de retorno
Um reverse_iterator
que trata o elemento de deslocamento.
Comentários
Essa função de membro pode ser usada somente se o reverse_iterator
satisfizer os requisitos de um iterador de acesso aleatório.
Exemplo
// 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::operador--
Decrementa o reverse_iterator para o elemento anterior.
reverse_iterator<RandomIterator>& operator--();
reverse_iterator<RandomIterator> operator--(int);
Valor de retorno
O primeiro operador retorna o reverse_iterator
pré-decrementado e o segundo, o operador pós-decrementado, retorna uma cópia do reverse_iterator
decrementado.
Comentários
Essa função de membro só pode ser usada se o reverse_iterator
satisfizer os requisitos de um iterador bidirecional.
Exemplo
// 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::operador-=
Subtrai um deslocamento especificado de um reverse_iterator
.
reverse_iterator<RandomIterator>& operator-=(difference_type Off);
Parâmetros
Desativado
O deslocamento a ser subtraído de reverse_iterator
.
Comentários
Essa função de membro pode ser usada somente se o reverse_iterator
satisfizer os requisitos de um iterador de acesso aleatório.
O operador avalia current + Off e, em seguida, retorna *this
.
Exemplo
// 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->
Retorna um ponteiro para o elemento tratado pelo reverse_iterator
.
pointer operator->() const;
Valor de retorno
Um ponteiro para o elemento tratado pelo reverse_iterator
.
Comentários
O operador retorna &**this
.
Exemplo
// 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::operador
Retorna uma referência a um deslocamento do elemento tratado por um reverse_iterator
por um número especificado de posições.
reference operator[](difference_type Off) const;
Parâmetros
Desativado
O deslocamento do endereço reverse_iterator
.
Valor de retorno
A referência ao deslocamento de elemento.
Comentários
O operador retorna *( *this
+ Off
).
Exemplo
// 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
Um tipo que fornece um ponteiro para um elemento tratado por um reverse_iterator
.
typedef typename iterator_traits<RandomIterator>::pointer pointer;
Comentários
O tipo é um sinônimo do typename de característica do iterador iterator_traits
<RandomIterator>::pointer.
Exemplo
// 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::referência
Um tipo que fornece uma referência a um elemento tratado por um reverse_iterator.
typedef typename iterator_traits<RandomIterator>::reference reference;
Comentários
O tipo é um sinônimo para a característica do iterador typename iterator_traits<RandomIterator>::reference
.
Exemplo
Consulte reverse_iterator::operator[]
ou reverse_iterator::operator* para exemplos de como declarar e usar reference
.
reverse_iterator::reverse_iterator
Constrói um reverse_iterator
padrão ou um reverse_iterator
de um iterador subjacente.
reverse_iterator();
explicit reverse_iterator(RandomIterator right);
template <class Type>
reverse_iterator(const reverse_iterator<Type>& right);
Parâmetros
direita
O iterador deve ser adaptado para um reverse_iterator
.
Valor de retorno
Um reverse_iterator
padrão ou um reverse_iterator
que adapta um iterador subjacente.
Comentários
A identidade que relaciona a todos os iteradores inversos a seus iteradores subjacentes é:
&*(reverse_iterator (i)) == &*(i-1)
.
Na prática, isso significa que na sequência invertida, reverse_iterator fará referência ao elemento que está uma posição depois (à direita do) do elemento ao qual o iterador se referiu na sequência original. Desse modo, se um iterador tratou o elemento 6 na sequência (2, 4, 6, 8), reverse_iterator
tratará o elemento 4 na sequência inversa (8, 6, 4, 2).
Exemplo
// 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;
}
Confira também
<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++