Partager via


reverse_iterator, classe

Le modèle de classe est un adaptateur d’itérateur qui décrit un objet itérateur inverse qui se comporte comme un itérateur d’accès aléatoire ou bidirectionnel, uniquement en inverse. Elle permet de parcourir une plage à reculons.

Syntaxe

template <class RandomIterator>
class reverse_iterator

Paramètres

RandomIterator Le type qui représente l’itérateur à adapter pour fonctionner en inverse.

Notes

Les conteneurs fournis dans la bibliothèque standard C++ définissent également les types reverse_iterator et const_reverse_iterator, et possèdent les fonctions membres rbegin et rend qui retournent des itérateurs inverses. Ces itérateurs ont une sémantique de remplacement. L’adaptateur reverse_iterator complète cette fonctionnalité, car il offre une sémantique d’insertion et peut également être utilisé avec des flux.

Ce reverse_iterator qui nécessite un itérateur bidirectionnel ne doit pas appeler l’une des fonctions operator+=membres , , operator+, operator-=operator-ou operator[], qui peuvent uniquement être utilisées avec des itérateurs d’accès aléatoire.

La plage d’un itérateur est [première, dernière), où le crochet sur la gauche indique l’inclusion du premier et la parenthèse à droite indique l’inclusion d’éléments jusqu’à la dernière exception. Les mêmes éléments sont inclus dans la séquence inversée [ rev - first, rev - last) afin que si le dernier est l’élément un-past-the-end dans une séquence, alors le premier élément rev - premier dans la séquence inversée pointe vers *(last - 1). L’identité qui associe tous les itérateurs inverses à leurs itérateurs sous-jacents est :

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

En pratique, cela signifie que dans la séquence inversée le reverse_iterator se rapportera à l'élément situé une position au-delà (à droite) de l'élément auquel l'itérateur se rapportait dans la séquence d'origine. Ainsi, si un itérateur se rapportait à l'élément 6 dans la séquence (2, 4, 6, 8), le reverse_iterator se rapporte à l'élément 4 dans la séquence inversée (8, 6, 4, 2).

Constructeurs

Constructeur Description
reverse_iterator Construit un reverse_iterator par défaut ou un reverse_iterator à partir d'un itérateur sous-jacent.

Typedefs

Nom de type Description
difference_type Type qui fournit la différence entre deux objets reverse_iterator se rapportant à des éléments dans le même conteneur.
iterator_type Type qui fournit l'itérateur sous-jacent d'un reverse_iterator.
pointer Type qui fournit un pointeur vers un élément traité par un reverse_iterator.
référence Type qui fournit une référence à un élément traité par un reverse_iterator.

Fonctions Membre

Fonction membre Description
base Récupère l'itérateur sous-jacent à partir de son reverse_iterator.

Opérateurs

Opérateur Description
operator_star Retourne l'élément traité par reverse_iterator.
operator+ Ajoute un décalage à un itérateur et retourne le nouvel reverse_iterator qui se rapporte à l'élément inséré à la nouvelle position décalée.
operator++ Incrémente le reverse_iterator à l'élément suivant.
operator+= Ajoute un décalage spécifié à partir d'un reverse_iterator.
operator- Soustrait un décalage à un reverse_iterator et retourne un reverse_iterator se rapportant à l'élément situé à la position décalée.
operator-- Décrémente le reverse_iterator à l'élément précédent.
operator-= Soustrait un décalage spécifié d'un reverse_iterator.
operator-> Retourne un pointeur vers l'élément traité par le reverse_iterator.
operator[] Retourne une référence à un élément décalé d'un nombre donné de positions par rapport à l'élément auquel un reverse_iterator se rapportait.

Spécifications

Header :<iterator>

Espace de noms : std

reverse_iterator ::base

Récupère l'itérateur sous-jacent à partir de son reverse_iterator.

RandomIterator base() const;

Valeur de retour

Itérateur sous-jacent à reverse_iterator.

Notes

L’identité qui associe tous les itérateurs inverses à leurs itérateurs sous-jacents est :

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

En pratique, cela signifie que dans la séquence inversée, reverse_iterator se rapporte à l’élément situé une position à droite de l’élément auquel l’itérateur se rapportait dans la séquence d’origine. Ainsi, si un itérateur se rapportait à l'élément 6 dans la séquence (2, 4, 6, 8), le reverse_iterator se rapporte à l'élément 4 dans la séquence inversée (8, 6, 4, 2).

Exemple

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

Type qui fournit la différence entre deux objets reverse_iterator se rapportant à des éléments dans le même conteneur.

typedef typename iterator_traits<RandomIterator>::difference_type  difference_type;

Notes

Le type de différence entre objets reverse_iterator est le même que le type de différence entre itérateurs.

Le type est un synonyme du typename des caractéristiques de l’itérateur iterator_traits<RandomIterator>::pointer.

Exemple

Consultez reverse_iterator::operator[] un exemple de déclaration et d’utilisation difference_type.

reverse_iterator ::iterator_type

Type qui fournit l'itérateur sous-jacent d'un reverse_iterator.

typedef RandomIterator iterator_type;

Notes

Le type est un synonyme du paramètre de modèle Iterator.

Exemple

Consultez reverse_iterator::base pour obtenir un exemple montrant comment déclarer et utiliser iterator_type.

reverse_iterator ::operator*

Retourne l’élément traité par un reverse_iterator.

reference operator*() const;

Valeur de retour

Valeur des éléments traités par le reverse_iterator.

Notes

L’opérateur retourne *( actuel - 1).

Exemple

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

Ajoute un décalage à un itérateur et retourne le nouvel reverse_iterator qui se rapporte à l'élément inséré à la nouvelle position décalée.

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

Paramètres

Désactivé
Décalage à ajouter à l’itérateur inverse.

Valeur de retour

reverse_iterator se rapportant à l’élément de décalage.

Notes

Cette fonction membre peut uniquement être utilisée si le reverse_iterator remplit les conditions pour un itérateur d’accès aléatoire.

Exemple

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

Incrémente le reverse_iterator à l’élément précédent.

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

Valeur de retour

Le premier opérateur retourne le reverse_iterator préincrémenté et le deuxième, l’opérateur de postincrémentation, retourne une copie du reverse_iterator incrémenté.

Notes

Cette fonction membre peut uniquement être utilisée si le reverse_iterator remplit les conditions pour un itérateur bidirectionnel.

Exemple

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

Ajoute un décalage spécifié à partir d’un reverse_iterator.

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

Paramètres

Désactivé
Décalage d’incrémentation de l’itérateur.

Valeur de retour

Référence à l’élément traité par le reverse_iterator.

Exemple

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

Soustrait un décalage à un reverse_iterator et retourne un reverse_iterator se rapportant à l'élément situé à la position décalée.

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

Paramètres

Désactivé
Décalage à soustraire du reverse_iterator.

Valeur de retour

reverse_iterator se rapportant à l’élément de décalage.

Notes

Cette fonction membre peut uniquement être utilisée si le reverse_iterator remplit les conditions pour un itérateur d’accès aléatoire.

Exemple

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

Décrémente le reverse_iterator à l’élément précédent.

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

Valeur de retour

Le premier opérateur retourne le reverse_iterator prédécrémenté et le deuxième, l’opérateur de postdécrémentation, retourne une copie du reverse_iterator décrémenté.

Notes

Cette fonction membre peut uniquement être utilisée si le reverse_iterator remplit les conditions pour un itérateur bidirectionnel.

Exemple

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

Soustrait un décalage spécifié d'un reverse_iterator.

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

Paramètres

Désactivé
Décalage à soustraire du reverse_iterator.

Notes

Cette fonction membre peut uniquement être utilisée si le reverse_iterator remplit les conditions pour un itérateur d’accès aléatoire.

L’opérateur évalue la valeur Off actuelle + , puis retourne .*this

Exemple

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

Retourne un pointeur vers l'élément traité par le reverse_iterator.

pointer operator->() const;

Valeur de retour

Pointeur vers l’élément ciblé par le reverse_iterator.

Notes

L'opérateur retourne &**this.

Exemple

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

Retourne une référence à un élément décalé d'un nombre donné de positions par rapport à l'élément auquel un reverse_iterator se rapportait.

reference operator[](difference_type Off) const;

Paramètres

Désactivé
Décalage par rapport au reverse_iterator traité.

Valeur de retour

Référence au décalage de l’élément.

Notes

L’opérateur retourne *( *this + Off).

Exemple

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

Type qui fournit un pointeur vers un élément traité par un reverse_iterator.

typedef typename iterator_traits<RandomIterator>::pointer pointer;

Notes

Le type est un synonyme du typename des caractéristiques de l’itérateur iterator_traits<RandomIterator>::pointer.

Exemple

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

Type qui fournit une référence à un élément traité par un reverse_iterator.

typedef typename iterator_traits<RandomIterator>::reference reference;

Notes

Le type est un synonyme du nom de type de iterator_traits<RandomIterator>::referencetrait d’itérateur .

Exemple

Consultez reverse_iterator::operator[] ou reverse_iterator ::operator* pour obtenir des exemples de déclaration et d’utilisation reference.

reverse_iterator ::reverse_iterator

Construit un reverse_iterator par défaut ou un reverse_iterator à partir d'un itérateur sous-jacent.

reverse_iterator();
explicit reverse_iterator(RandomIterator right);

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

Paramètres

right
Itérateur devant être adapté à un reverse_iterator.

Valeur de retour

reverse_iterator par défaut ou reverse_iterator utilisé pour l’adaptation d’un itérateur sous-jacent.

Notes

L’identité qui associe tous les itérateurs inverses à leurs itérateurs sous-jacents est :

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

En pratique, cela signifie que dans la séquence inversée le reverse_iterator se rapportera à l'élément situé une position au-delà (à droite) de l'élément auquel l'itérateur se rapportait dans la séquence d'origine. Ainsi, si un itérateur se rapportait à l'élément 6 dans la séquence (2, 4, 6, 8), le reverse_iterator se rapporte à l'élément 4 dans la séquence inversée (8, 6, 4, 2).

Exemple

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

Voir aussi

<iterator>
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++