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.
template <class RandomIterator>
class reverse_iterator
RandomIterator Le type qui représente l’itérateur à adapter pour fonctionner en inverse.
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).
Constructeur | Description |
---|---|
reverse_iterator | Construit un reverse_iterator par défaut ou un reverse_iterator à partir d'un itérateur sous-jacent. |
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 . |
Fonction membre | Description |
---|---|
base | Récupère l'itérateur sous-jacent à partir de son reverse_iterator . |
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. |
Header :<iterator>
Espace de noms : std
Récupère l'itérateur sous-jacent à partir de son reverse_iterator
.
RandomIterator base() const;
Itérateur sous-jacent à reverse_iterator
.
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).
// 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;
}
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;
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.
Consultez reverse_iterator::operator[]
un exemple de déclaration et d’utilisation difference_type
.
Type qui fournit l'itérateur sous-jacent d'un reverse_iterator
.
typedef RandomIterator iterator_type;
Le type est un synonyme du paramètre de modèle Iterator
.
Consultez reverse_iterator::base pour obtenir un exemple montrant comment déclarer et utiliser iterator_type
.
Retourne l’élément traité par un reverse_iterator.
reference operator*() const;
Valeur des éléments traités par le reverse_iterator.
L’opérateur retourne *( actuel - 1).
// 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;
}
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;
Désactivé
Décalage à ajouter à l’itérateur inverse.
reverse_iterator
se rapportant à l’élément de décalage.
Cette fonction membre peut uniquement être utilisée si le reverse_iterator
remplit les conditions pour un itérateur d’accès aléatoire.
// 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.
Incrémente le reverse_iterator à l’élément précédent.
reverse_iterator<RandomIterator>& operator++();
reverse_iterator<RandomIterator> operator++(int);
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é.
Cette fonction membre peut uniquement être utilisée si le reverse_iterator
remplit les conditions pour un itérateur bidirectionnel.
// 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.
Ajoute un décalage spécifié à partir d’un reverse_iterator.
reverse_iterator<RandomIterator>& operator+=(difference_type Off);
Désactivé
Décalage d’incrémentation de l’itérateur.
Référence à l’élément traité par le reverse_iterator
.
// 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.
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;
Désactivé
Décalage à soustraire du reverse_iterator.
reverse_iterator
se rapportant à l’élément de décalage.
Cette fonction membre peut uniquement être utilisée si le reverse_iterator
remplit les conditions pour un itérateur d’accès aléatoire.
// 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.
Décrémente le reverse_iterator à l’élément précédent.
reverse_iterator<RandomIterator>& operator--();
reverse_iterator<RandomIterator> operator--(int);
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é.
Cette fonction membre peut uniquement être utilisée si le reverse_iterator
remplit les conditions pour un itérateur bidirectionnel.
// 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.
Soustrait un décalage spécifié d'un reverse_iterator
.
reverse_iterator<RandomIterator>& operator-=(difference_type Off);
Désactivé
Décalage à soustraire du reverse_iterator
.
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
// 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.
Retourne un pointeur vers l'élément traité par le reverse_iterator
.
pointer operator->() const;
Pointeur vers l’élément ciblé par le reverse_iterator
.
L'opérateur retourne &**this
.
// 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 )
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;
Désactivé
Décalage par rapport au reverse_iterator
traité.
Référence au décalage de l’élément.
L’opérateur retourne *( *this
+ Off
).
// 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.
Type qui fournit un pointeur vers un élément traité par un reverse_iterator
.
typedef typename iterator_traits<RandomIterator>::pointer pointer;
Le type est un synonyme du typename des caractéristiques de l’itérateur iterator_traits
<RandomIterator>::pointer.
// 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 )
Type qui fournit une référence à un élément traité par un reverse_iterator.
typedef typename iterator_traits<RandomIterator>::reference reference;
Le type est un synonyme du nom de type de iterator_traits<RandomIterator>::reference
trait d’itérateur .
Consultez reverse_iterator::operator[]
ou reverse_iterator ::operator* pour obtenir des exemples de déclaration et d’utilisation reference
.
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);
right
Itérateur devant être adapté à un reverse_iterator
.
reverse_iterator
par défaut ou reverse_iterator
utilisé pour l’adaptation d’un itérateur sous-jacent.
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).
// 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;
}
<iterator>
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++