Udostępnij za pośrednictwem


reverse_iterator — Klasa

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