Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Szablon klasy jest iteratorem opisujący obiekt iteratora odwrotnego, który zachowuje się jak iterator losowy lub dwukierunkowy iterator, tylko odwrotnie. Umożliwia przechodzenie do tyłu zakresu.
Składnia
template <class RandomIterator>
class reverse_iterator
Parametry
RandomIterator typ reprezentujący iterator, który ma być dostosowany do działania odwrotnie.
Uwagi
Istniejące kontenery biblioteki standardowej języka C++ definiują reverse_iterator również typy i const_reverse_iterator mają funkcje rbegin składowe oraz rend zwracają iteratory odwrotne. Te iteratory mają semantykę nadpisywania. Adapter reverse_iterator uzupełnia tę funkcjonalność, ponieważ oferuje semantyki wstawiania i może być również używany ze strumieniami.
Obiektreverse_iterator, który wymaga iteratora dwukierunkowego, nie może wywoływać żadnych funkcji operator+=składowych , , operator-=operator+, operator-lub operator[], które mogą być używane tylko z iteratorami dostępu losowego.
Zakres iteratora to [first, last), gdzie nawias kwadratowy po lewej stronie wskazuje włączenie pierwszego i nawias po prawej stronie wskazuje włączenie elementów do końca, ale z wyłączeniem wartości ostatniej. Te same elementy są uwzględniane w odwrotnej sekwencji [rev first, rev - - last), tak aby jeśli ostatni element jest elementem one-past-the-end w sekwencji, to pierwszy element rev - najpierw w odwróconej sekwencji wskazuje wartość *(ostatnie - 1). Tożsamość, która odnosi wszystkie iteratory odwrotne do ich podstawowych iteratorów, to:
&*(reverse_iterator (i)) == &*(i - 1).
W praktyce oznacza to, że w odwróconej sekwencji reverse_iterator będzie się odnosił do elementu w jednej pozycji poza elementem (z jego prawej strony), do którego odnosił się iterator w oryginalnej sekwencji. Dlatego jeśli iterator zwrócił się do elementu 6 w sekwencji (2, 4, 6, 8), element reverse_iterator będzie adresowany element 4 w odwrotnej sekwencji (8, 6, 4, 2).
Konstruktory
| Konstruktor | opis |
|---|---|
| reverse_iterator | Tworzy wartość domyślną reverse_iterator lub z reverse_iterator bazowego iteratora. |
Typedefs
| Nazwa typu | opis |
|---|---|
| difference_type | Typ, który zapewnia różnicę między dwoma reverse_iteratorelementami w tym samym kontenerze. |
| iterator_type | Typ, który udostępnia iterator bazowy dla elementu reverse_iterator. |
| wskaźnik | Typ, który dostarcza wskaźnik do elementu adresowanego reverse_iteratorprzez element . |
| odniesienie | Typ, który zawiera odwołanie do elementu, do którego reverse_iteratorodnosi się element . |
Funkcje składowe
| Funkcja składowa | opis |
|---|---|
| base | Odzyskuje źródłowy iterator z jego reverse_iterator. |
Operatory
| Operator | opis |
|---|---|
| operator_star | Zwraca element adresowy reverse_iterator . |
| operator+ | Dodaje przesunięcie do iteratora i zwraca nowe reverse_iterator adresowanie wstawionego elementu w nowej pozycji przesunięcia. |
| operator++ | Zwiększa reverse_iterator wartość do następnego elementu. |
| operator+= | Dodaje określone przesunięcie z elementu reverse_iterator. |
| operator- | Odejmuje przesunięcie od elementu reverse_iterator i zwraca reverse_iterator adresowanie elementu w pozycji przesunięcia. |
| operator-- | Dekrementuje element reverse_iterator do poprzedniego elementu. |
| operator-= | Odejmuje określone przesunięcie z elementu reverse_iterator. |
| operator-> | Zwraca wskaźnik do elementu adresowanego reverse_iteratorprzez element . |
operator[] |
Zwraca odwołanie do przesunięcia elementu z elementu adresowanego przez reverse_iterator określoną liczbę pozycji. |
Wymagania
Nagłówek:<iterator>
Przestrzeń nazw: std
reverse_iterator::base
Odzyskuje źródłowy iterator z jego reverse_iterator.
RandomIterator base() const;
Wartość zwracana
Iterator bazuje na obiekcie reverse_iterator.
Uwagi
Tożsamość, która odnosi wszystkie iteratory odwrotne do ich podstawowych iteratorów, to:
&*(reverse_iterator (i)) == &*(i - 1).
W praktyce oznacza to, że w odwróconej sekwencji element będzie odwoływać się do jednego położenia poza (po prawej stronie) elementu, do którego iterator odwoływał się w oryginalnej sekwencji reverse_iterator . Dlatego jeśli iterator zwrócił się do elementu 6 w sekwencji (2, 4, 6, 8), element reverse_iterator będzie adresowany element 4 w odwrotnej sekwencji (8, 6, 4, 2).
Przykład
// 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
Typ, który zapewnia różnicę między dwoma reverse_iteratorelementami w tym samym kontenerze.
typedef typename iterator_traits<RandomIterator>::difference_type difference_type;
Uwagi
Typ reverse_iterator różnicy jest taki sam jak typ różnicy iteratora.
Typ jest synonimem nazwy iterator_traits<typu iteratora RandomIterator>::p ointer.
Przykład
Zobacz reverse_iterator::operator[] przykład sposobu deklarowania i używania elementu difference_type.
reverse_iterator::iterator_type
Typ, który udostępnia iterator bazowy dla elementu reverse_iterator.
typedef RandomIterator iterator_type;
Uwagi
Typ jest synonimem parametru Iteratorszablonu .
Przykład
Zobacz reverse_iterator::base , aby zapoznać się z przykładem sposobu deklarowania i używania elementu iterator_type.
reverse_iterator::operator*
Zwraca element, który reverse_iterator adresy.
reference operator*() const;
Wartość zwracana
Wartość elementów adresowanych przez reverse_iterator.
Uwagi
Operator zwraca wartość *( current - 1).
Przykład
// 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+
Dodaje przesunięcie do iteratora i zwraca nowe reverse_iterator adresowanie wstawionego elementu w nowej pozycji przesunięcia.
reverse_iterator<RandomIterator> operator+(difference_type Off) const;
Parametry
Wył.
Przesunięcie, które ma zostać dodane do iteratora odwrotnego.
Wartość zwracana
Adresowanie reverse_iterator elementu przesunięcia.
Uwagi
Ta funkcja składowa może być używana tylko wtedy, gdy reverse_iterator spełnia wymagania iteratora dostępu losowego.
Przykład
// 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++
Zwiększa reverse_iterator do poprzedniego elementu.
reverse_iterator<RandomIterator>& operator++();
reverse_iterator<RandomIterator> operator++(int);
Wartość zwracana
Pierwszy operator zwraca wstępnie zwiększoną reverse_iterator wartość, a drugi , operator postincrement, zwraca kopię przyrostowego reverse_iteratorelementu .
Uwagi
Ta funkcja składowa może być używana tylko wtedy, gdy reverse_iterator spełnia wymagania iteratora dwukierunkowego.
Przykład
// 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+=
Dodaje określone przesunięcie z reverse_iterator.
reverse_iterator<RandomIterator>& operator+=(difference_type Off);
Parametry
Wył.
Przesunięcie, o które ma zwiększać iterator.
Wartość zwracana
Odwołanie do elementu, do których reverse_iteratorodnosi się element .
Przykład
// 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-
Odejmuje przesunięcie od elementu reverse_iterator i zwraca reverse_iterator adresowanie elementu w pozycji przesunięcia.
reverse_iterator<RandomIterator> operator-(difference_type Off) const;
Parametry
Wył.
Przesunięcie, które ma zostać odjęte od reverse_iterator.
Wartość zwracana
Adresowanie reverse_iterator elementu przesunięcia.
Uwagi
Ta funkcja składowa może być używana tylko wtedy, gdy reverse_iterator spełnia wymagania iteratora dostępu losowego.
Przykład
// 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-
Dekrementuje reverse_iterator do poprzedniego elementu.
reverse_iterator<RandomIterator>& operator--();
reverse_iterator<RandomIterator> operator--(int);
Wartość zwracana
Pierwszy operator zwraca wstępnie zadeklarowane reverse_iterator polecenie, a drugi operator postdecrement zwraca kopię dekrementacji reverse_iterator.
Uwagi
Ta funkcja składowa może być używana tylko wtedy, gdy reverse_iterator spełnia wymagania iteratora dwukierunkowego.
Przykład
// 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-=
Odejmuje określone przesunięcie z elementu reverse_iterator.
reverse_iterator<RandomIterator>& operator-=(difference_type Off);
Parametry
Wył.
Przesunięcie, które ma zostać odjęte od .reverse_iterator
Uwagi
Ta funkcja składowa może być używana tylko wtedy, gdy reverse_iterator spełnia wymagania iteratora dostępu losowego.
Operator oblicza bieżącą wartość + Wył., a następnie zwraca wartość .*this
Przykład
// 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->
Zwraca wskaźnik do elementu adresowanego reverse_iteratorprzez element .
pointer operator->() const;
Wartość zwracana
Wskaźnik do elementu adresowanego reverse_iteratorprzez element .
Uwagi
Operator zwraca wartość &**this.
Przykład
// 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[]
Zwraca odwołanie do przesunięcia elementu z elementu adresowanego przez reverse_iterator określoną liczbę pozycji.
reference operator[](difference_type Off) const;
Parametry
Wył.
Przesunięcie adresu reverse_iterator .
Wartość zwracana
Odwołanie do przesunięcia elementu.
Uwagi
Operator zwraca *wartość ( *this + Off).
Przykład
// 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
Typ, który dostarcza wskaźnik do elementu adresowanego reverse_iteratorprzez element .
typedef typename iterator_traits<RandomIterator>::pointer pointer;
Uwagi
Typ jest synonimem nazwy iterator_traits<typu iteratora RandomIterator>::p ointer.
Przykład
// 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
Typ, który zawiera odwołanie do elementu adresowanego przez reverse_iterator.
typedef typename iterator_traits<RandomIterator>::reference reference;
Uwagi
Typ jest synonimem nazwy iterator_traits<RandomIterator>::referencetypu typu iteratora .
Przykład
Zobacz reverse_iterator::operator[] lub reverse_iterator::operator* , aby zapoznać się z przykładami sposobu deklarowania i używania elementu reference.
reverse_iterator::reverse_iterator
Tworzy wartość domyślną reverse_iterator lub z reverse_iterator bazowego iteratora.
reverse_iterator();
explicit reverse_iterator(RandomIterator right);
template <class Type>
reverse_iterator(const reverse_iterator<Type>& right);
Parametry
Prawy
Iterator, który ma zostać dostosowany do .reverse_iterator
Wartość zwracana
Wartość domyślna reverse_iterator lub reverse_iterator dostosowanie bazowego iteratora.
Uwagi
Tożsamość, która odnosi wszystkie iteratory odwrotne do ich podstawowych iteratorów, to:
&*(reverse_iterator (i)) == &*(i-1).
W praktyce oznacza to, że w odwróconej sekwencji reverse_iterator będzie się odnosił do elementu w jednej pozycji poza elementem (z jego prawej strony), do którego odnosił się iterator w oryginalnej sekwencji. Dlatego jeśli iterator zwrócił się do elementu 6 w sekwencji (2, 4, 6, 8), element reverse_iterator będzie adresowany element 4 w odwrotnej sekwencji (8, 6, 4, 2).
Przykład
// 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;
}
Zobacz też
<Sterująca>
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++