Condividi tramite


Classe reverse_iterator

Il modello di classe è un adattatore iteratore che descrive un oggetto iteratore inverso che si comporta come un iteratore ad accesso casuale o bidirezionale, solo inverso. Consente l'attraversamento all'indietro di un intervallo.

Sintassi

template <class RandomIterator>
class reverse_iterator

Parametri

RandomIterator Il tipo che rappresenta l'iteratore da adattare per operare inverso.

Osservazioni:

I contenitori della libreria standard C++ definiscono anche i tipi reverse_iterator e const_reverse_iterator e hanno funzioni membro rbegin e rend che restituiscono iteratori inversi. Tali iteratori dispongono di una semantica di sovrascrittura. L'adattatore reverse_iterator integra questa funzionalità perché offre semantica di inserimento e può essere usato anche con i flussi.

L'oggetto reverse_iterator che richiede un iteratore bidirezionale non deve chiamare alcuna delle funzioni operator+=membro , , operator-=operator+operator-, o operator[], che possono essere usate solo con iteratori ad accesso casuale.

L'intervallo di un iteratore è [primo, ultimo), dove la parentesi quadrata a sinistra indica l'inclusione della prima e la parentesi a destra indica l'inclusione di elementi fino a ma escludendo l'ultima. Gli stessi elementi sono inclusi nella sequenza invertita [ rev first, rev - - last) in modo che se l'ultimo è l'elemento one-past-the-end in una sequenza, il primo elemento rev - first nella sequenza invertita punta a *(last - 1). L'identità che collega tutti gli iteratori inversi ai relativi iteratori sottostanti è:

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

In pratica, questo significa che in tale sequenza inversa reverse_iterator farà riferimento all'elemento immediatamente successivo (a destra) all'elemento a cui ha fatto riferimento l'iteratore nella sequenza originale. Quindi, se un iteratore ha puntato all'elemento 6 della sequenza (2, 4, 6, 8), reverse_iterator punterà all'elemento 4 della sequenza inversa (8, 6, 4, 2).

Costruttori

Costruttore Descrizione
reverse_iterator Costruisce un reverse_iterator predefinito o un reverse_iterator da un iteratore sottostante.

Typedef

Nome tipo Descrizione
difference_type Tipo che fornisce la differenza tra due reverse_iterator che fanno riferimento agli elementi all'interno dello stesso contenitore.
iterator_type Tipo che fornisce l'iteratore sottostante per un reverse_iterator.
pointer Tipo che fornisce un puntatore a un elemento a cui punta un reverse_iterator.
reference Tipo che fornisce un riferimento a un elemento a cui punta un reverse_iterator.

Funzioni membro

Funzione membro Descrizione
base Recupera l'iteratore sottostante dal relativo reverse_iterator.

Operatori

Operatore Descrizione
operator_star Restituisce l'elemento a cui punta un reverse_iterator.
operator+ Aggiunge un offset a un iteratore e restituisce il nuovo reverse_iterator che punta all'elemento inserito in corrispondenza della nuova posizione dell'offset.
operator++ Incrementa reverse_iterator all'elemento successivo.
operator+= Aggiunge un offset specificato da un reverse_iterator.
operator- Sottrae un offset da un reverse_iterator e restituisce un reverse_iterator che punta all'elemento in corrispondenza della posizione dell'offset.
operatore-- Decrementa reverse_iterator all'elemento precedente.
operator-= Sottrae un offset specificato da un reverse_iterator.
operator-> Restituisce un puntatore all'elemento a cui punta un reverse_iterator.
operator[] Restituisce un riferimento all'offset di un elemento dall'elemento a cui punta un reverse_iterator di un numero specificato di posizioni.

Requisiti

Header:<iterator>

Spazio dei nomi: std

reverse_iterator::base

Recupera l'iteratore sottostante dal relativo reverse_iterator.

RandomIterator base() const;

Valore restituito

Iteratore sottostante l'oggetto reverse_iterator.

Osservazioni:

L'identità che collega tutti gli iteratori inversi ai relativi iteratori sottostanti è:

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

In pratica, questo significa che in tale sequenza inversa l'oggetto reverse_iterator farà riferimento all'elemento immediatamente successivo (a destra) all'elemento a cui ha fatto riferimento l'iteratore nella sequenza originale. Quindi, se un iteratore ha puntato all'elemento 6 della sequenza (2, 4, 6, 8), reverse_iterator punterà all'elemento 4 della sequenza inversa (8, 6, 4, 2).

Esempio

// 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 che fornisce la differenza tra due reverse_iterator che fanno riferimento agli elementi all'interno dello stesso contenitore.

typedef typename iterator_traits<RandomIterator>::difference_type  difference_type;

Osservazioni:

Il tipo di differenza reverse_iterator corrisponde al tipo di differenza dell'iteratore.

Il tipo è un sinonimo del nome tipo del tratto dell'iteratore iterator_traits<RandomIterator>::pointer.

Esempio

Vedere reverse_iterator::operator[] per un esempio di come dichiarare e usare difference_type.

reverse_iterator::iterator_type

Tipo che fornisce l'iteratore sottostante per un reverse_iterator.

typedef RandomIterator iterator_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Iterator.

Esempio

Vedere reverse_iterator::base per indicazioni su come dichiarare e usare iterator_type.

reverse_iterator::operator*

Restituisce l'elemento a cui punta un oggetto reverse_iterator.

reference operator*() const;

Valore restituito

Valore degli elementi a cui punta l'oggetto reverse_iterator.

Osservazioni:

L'operatore restituisce *( corrente - 1).

Esempio

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

Aggiunge un offset a un iteratore e restituisce il nuovo reverse_iterator che punta all'elemento inserito in corrispondenza della nuova posizione dell'offset.

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

Parametri

Disattivato
Offset da aggiungere all'iteratore inverso.

Valore restituito

Oggetto reverse_iterator che punta all'elemento di offset.

Osservazioni:

Questa funzione membro può essere usata solo se reverse_iterator soddisfa i requisiti di un iteratore ad accesso causale.

Esempio

// 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 l'oggetto reverse_iterator all'elemento precedente.

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

Valore restituito

Il primo operatore restituisce l'oggetto reverse_iterator pre-incrementato e il secondo, l'operatore di post-incremento, restituisce una copia dell'oggetto reverse_iterator incrementato.

Osservazioni:

Questa funzione membro può essere usata solo se reverse_iterator soddisfa i requisiti di un iteratore bidirezionale.

Esempio

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

Aggiunge un offset specificato da un oggetto reverse_iterator.

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

Parametri

Disattivato
Offset di incremento dell'iteratore.

Valore restituito

Riferimento all'elemento a cui punta l'oggetto reverse_iterator.

Esempio

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

Sottrae un offset da un reverse_iterator e restituisce un reverse_iterator che punta all'elemento in corrispondenza della posizione dell'offset.

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

Parametri

Disattivato
Offset da sottrarre dall'oggetto reverse_iterator.

Valore restituito

Oggetto reverse_iterator che punta all'elemento di offset.

Osservazioni:

Questa funzione membro può essere usata solo se reverse_iterator soddisfa i requisiti di un iteratore ad accesso causale.

Esempio

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

Decrementa l'oggetto reverse_iterator all'elemento precedente.

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

Valore restituito

Il primo operatore restituisce l'oggetto reverse_iterator pre-decrementato e il secondo, l'operatore di post-decremento, restituisce una copia dell'oggetto reverse_iterator decrementato.

Osservazioni:

Questa funzione membro può essere usata solo se reverse_iterator soddisfa i requisiti di un iteratore bidirezionale.

Esempio

// 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-=

Sottrae un offset specificato da un reverse_iterator.

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

Parametri

Disattivato
Offset da sottrarre dall'oggetto reverse_iterator.

Osservazioni:

Questa funzione membro può essere usata solo se reverse_iterator soddisfa i requisiti di un iteratore ad accesso causale.

L'operatore valuta l'oggetto Off corrente + e quindi restituisce .*this

Esempio

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

Restituisce un puntatore all'elemento a cui punta un reverse_iterator.

pointer operator->() const;

Valore restituito

Puntatore all'elemento a cui punta l'oggetto reverse_iterator.

Osservazioni:

L'operatore restituisce &**this.

Esempio

// 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[]

Restituisce un riferimento all'offset di un elemento dall'elemento a cui punta un reverse_iterator di un numero specificato di posizioni.

reference operator[](difference_type Off) const;

Parametri

Disattivato
Offset dall'indirizzo dell'oggetto reverse_iterator.

Valore restituito

Riferimento all'offset dell'elemento.

Osservazioni:

L'operatore restituisce *( *this + Off).

Esempio

// 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 che fornisce un puntatore a un elemento a cui punta un reverse_iterator.

typedef typename iterator_traits<RandomIterator>::pointer pointer;

Osservazioni:

Il tipo è un sinonimo del nome tipo del tratto dell'iteratore iterator_traits<RandomIterator>::pointer.

Esempio

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

Tipo che fornisce un riferimento a un elemento a cui punta un oggetto reverse_iterator.

typedef typename iterator_traits<RandomIterator>::reference reference;

Osservazioni:

Il tipo è un sinonimo del nometipo del iterator_traits<RandomIterator>::referencetratto iteratore .

Esempio

Vedere reverse_iterator::operator[] o reverse_iterator::operator* per esempi di come dichiarare e usare reference.

reverse_iterator::reverse_iterator

Costruisce un reverse_iterator predefinito o un reverse_iterator da un iteratore sottostante.

reverse_iterator();
explicit reverse_iterator(RandomIterator right);

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

Parametri

right
Iteratore da adattare a un oggetto reverse_iterator.

Valore restituito

Oggetto reverse_iterator predefinito o reverse_iterator adattato da un iteratore sottostante.

Osservazioni:

L'identità che collega tutti gli iteratori inversi ai relativi iteratori sottostanti è:

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

In pratica, questo significa che in tale sequenza inversa reverse_iterator farà riferimento all'elemento immediatamente successivo (a destra) all'elemento a cui ha fatto riferimento l'iteratore nella sequenza originale. Quindi, se un iteratore ha puntato all'elemento 6 della sequenza (2, 4, 6, 8), reverse_iterator punterà all'elemento 4 della sequenza inversa (8, 6, 4, 2).

Esempio

// 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;
}

Vedi anche

<iterator>
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++