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>::reference
trait 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++