Freigeben über


reverse_iterator-Klasse

Die Klassenvorlage ist ein Iteratoradapter, der ein Umgekehrtes Iteratorobjekt beschreibt, das sich wie ein zufälliger Zugriff oder eine bidirektionale Iterator verhält, nur umgekehrt. Er ermöglicht es, einen Bereich rückwärts zu durchlaufen.

Syntax

template <class RandomIterator>
class reverse_iterator

Parameter

RandomIterator Der Typ, der den Iterator darstellt, der an den Umgekehrten Betrieb angepasst werden soll.

Hinweise

Vorhandene C++-Standardbibliothekscontainer definieren auch die Typen reverse_iterator und const_reverse_iterator und verfügen über die Memberfunktionen rbegin und rend, die Reverse-Iteratoren zurückgeben. Diese Iteratoren verfügen über Semantik zum Überschreiben. Der reverse_iterator Adaptor ergänzt diese Funktionalität, da sie Einfügesemantik bietet und auch mit Datenströmen verwendet werden kann.

Dies reverse_iterator erfordert einen bidirektionalen Iterator, darf keine der Memberfunktionen operator+=, , operator+, operator-=, operator-oder operator[], die nur mit Iteratoren mit wahlfreiem Zugriff verwendet werden können.

Der Bereich eines Iterators ist [zuerst, zuletzt), wobei die eckige Klammer auf der linken Seite die Aufnahme der ersten und der Klammer auf der rechten Seite die Aufnahme von Elementen bis zum Letzten angibt, aber die letzte ausschließt. Die gleichen Elemente sind in der umgekehrten Sequenz [Rev first, rev - - last) enthalten, sodass, wenn es sich bei der letzten um das Ein-Past-the-End-Element in einer Sequenz handelt, das erste Element rev - first in der umgekehrten Sequenz auf *(last - 1) zeigt. Die Identität, die alle umgekehrten Iteratoren auf die zugrunde liegenden Iteratoren bezieht:

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

In der Praxis bedeutet dies, dass in der umgekehrten Sequenz das reverse_iterator-Objekt auf das Element verweist, das eine Position hinter dem Element (rechts davon) liegt, auf das der Iterator in der ursprünglichen Sequenz verwiesen hat. Wenn ein Iterator das Element 6 in der Sequenz adressierte (2, 4, 6, 8), dann adressiert reverse_iterator das Element 4 in der umgekehrten Sequenz (8, 6, 4, 2).

Konstruktoren

Konstruktor Beschreibung
reverse_iterator Erstellt aus einem zugrunde liegenden Iterator einen standardmäßigen reverse_iterator oder reverse_iterator.

TypeDefs

Typname Beschreibung
difference_type Ein Typ, mit dem der Unterschied zwischen zwei reverse_iteratoren bereitgestellt wird, die auf Elemente innerhalb desselben Containers verweisen.
iterator_type Ein Typ, der einen zugrunde liegenden Iterator für einen reverse_iterator bereitstellt.
pointer Ein Typ, mit dem ein Zeiger auf ein Element bereitgestellt wird, die von reverse_iterator adressiert werden.
reference Ein Typ, mit dem ein Verweis auf ein Element bereitgestellt wird, die von reverse_iterator adressiert werden.

Memberfunktionen

Memberfunktion Beschreibung
base Stellt den zugrunde liegenden Iterator aus reverse_iterator wieder her.

Operatoren

Operator Beschreibung
operator_star Gibt das Element zurück, das ein reverse_iterator adressiert.
operator+ Fügt einen Offset zu einem Iterator hinzu und gibt den neuen reverse_iterator zurück, der auf das eingefügte Element an der neuen Offsetposition zeigt.
operator++ Erhöht reverse_iterator zum nächsten Element.
operator+= Fügt einen angegebenen Offset aus einem reverse_iterator hinzu.
operator- Subtrahiert einen Offset von einem reverse_iterator und gibt einen reverse_iterator zurück, der das Element an die Offsetposition adressiert.
Operator-- Verringert reverse_iterator zum vorherigen Element.
operator-= Subtrahiert einen angegebenen Offset von einem reverse_iterator.
operator-> Gibt einen Zeiger auf das Element zurück, das von reverse_iterator adressiert wird.
operator[] Gibt einen Verweis auf ein Elementoffset aus dem Element zurück, das von reverse_iterator mithilfe der angegebenen Anzahl von Positionen adressiert wird.

Anforderungen

Header:<iterator>

Namespace: std

reverse_iterator::base

Stellt den zugrunde liegenden Iterator aus reverse_iterator wieder her.

RandomIterator base() const;

Rückgabewert

Der reverse_iterator zugrunde liegenden Iterator.

Hinweise

Die Identität, die alle umgekehrten Iteratoren auf die zugrunde liegenden Iteratoren bezieht:

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

In der Praxis bedeutet dies, dass in der umgekehrten Sequenz reverse_iterator auf das Element verweist, das eine Position hinter dem Element (rechts davon) liegt, auf das der Iterator in der ursprünglichen Sequenz verwiesen hat. Wenn ein Iterator das Element 6 in der Sequenz adressierte (2, 4, 6, 8), dann adressiert reverse_iterator das Element 4 in der umgekehrten Sequenz (8, 6, 4, 2).

Beispiel

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

Ein Typ, mit dem der Unterschied zwischen zwei reverse_iteratoren bereitgestellt wird, die auf Elemente innerhalb desselben Containers verweisen.

typedef typename iterator_traits<RandomIterator>::difference_type  difference_type;

Hinweise

Der reverse_iterator-Differenztyp ist identisch mit den Differenztyp des Iterators.

Der Typ ist ein Synonym für den Merkmaltypnamen des Iterators iterator_traits<RandomIterator>:: pointer.

Beispiel

Ein Beispiel zum Deklarieren und Verwenden difference_typefinden Sie reverse_iterator::operator[] unter .

reverse_iterator::iterator_type

Ein Typ, der einen zugrunde liegenden Iterator für einen reverse_iterator bereitstellt.

typedef RandomIterator iterator_type;

Hinweise

Der Type stellt ein Synonym für den Vorlagenparameter Iteratordar.

Beispiel

Unter reverse_iterator::base finden Sie ein Beispiel für das Deklarieren und Verwenden von iterator_type.

reverse_iterator::operator*

Gibt das Element, das ein reverse_iterator behandelt, zurück.

reference operator*() const;

Rückgabewert

Der Wert der Elemente, die durch den reverse_iterator behoben wurden.

Hinweise

Der Operator gibt *( aktuell - 1) zurück.

Beispiel

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

Fügt einen Offset zu einem Iterator hinzu und gibt den neuen reverse_iterator zurück, der auf das eingefügte Element an der neuen Offsetposition zeigt.

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

Parameter

Deaktiviert
Der zum umgekehrten Iterator hinzuzufügende Offset.

Rückgabewert

Ein reverse_iterator, der das Offsetelement adressiert.

Hinweise

Diese Memberfunktion kann nur verwendet werden, wenn die reverse_iterator die Anforderungen für einen Random-Access-Iterator erfüllt.

Beispiel

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

Erhöht den reverse_iterator auf das vorherige Element.

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

Rückgabewert

Der erste Operator gibt den präinkrementierten reverse_iterator zurück, der zweite Postinkrementoperator gibt eine Kopie des inkrementierten reverse_iterator zurück.

Hinweise

Diese Memberfunktion kann nur verwendet werden, wenn die reverse_iterator die Anforderungen für einen bidirektionaler Iterator erfüllt.

Beispiel

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

Fügt einen angegebenen Offset aus einem reverse_iterator hinzu.

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

Parameter

Deaktiviert
Der Offset, um den der Iterator inkrementiert werden soll.

Rückgabewert

Ein Verweis auf das von reverse_iterator adressierte Element.

Beispiel

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

Subtrahiert einen Offset von einem reverse_iterator und gibt einen reverse_iterator zurück, der das Element an die Offsetposition adressiert.

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

Parameter

Deaktiviert
Der Offset, der vom reverse_iterator subtrahiert werden soll.

Rückgabewert

Ein reverse_iterator, der das Offsetelement adressiert.

Hinweise

Diese Memberfunktion kann nur verwendet werden, wenn die reverse_iterator die Anforderungen für einen Random-Access-Iterator erfüllt.

Beispiel

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

Erniedrigt den reverse_iterator auf das vorherige Element.

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

Rückgabewert

Der erste Operator gibt den prädekrementierten reverse_iterator zurück, der zweite Postdekrementoperator gibt eine Kopie des dekrementierten reverse_iterator zurück.

Hinweise

Diese Memberfunktion kann nur verwendet werden, wenn die reverse_iterator die Anforderungen für einen bidirektionaler Iterator erfüllt.

Beispiel

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

Subtrahiert einen angegebenen Offset von einem reverse_iterator.

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

Parameter

Deaktiviert
Der Offset, der vom reverse_iterator subtrahiert werden soll.

Hinweise

Diese Memberfunktion kann nur verwendet werden, wenn die reverse_iterator die Anforderungen für einen Random-Access-Iterator erfüllt.

Der Operator wertet den aktuellen + Wert "Aus" aus und gibt dann zurück.*this

Beispiel

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

Gibt einen Zeiger auf das Element zurück, das von reverse_iterator adressiert wird.

pointer operator->() const;

Rückgabewert

Ein Zeiger auf das von reverse_iterator adressierte Element.

Hinweise

Der Operator gibt &**this zurück.

Beispiel

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

Gibt einen Verweis auf ein Elementoffset aus dem Element zurück, das von reverse_iterator mithilfe der angegebenen Anzahl von Positionen adressiert wird.

reference operator[](difference_type Off) const;

Parameter

Deaktiviert
Der Offset von der reverse_iterator-Adresse.

Rückgabewert

Der Verweis auf den Elementoffset.

Hinweise

Der Operator gibt ( ) zurück*. *this + Off

Beispiel

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

Ein Typ, mit dem ein Zeiger auf ein Element bereitgestellt wird, die von reverse_iterator adressiert werden.

typedef typename iterator_traits<RandomIterator>::pointer pointer;

Hinweise

Der Typ ist ein Synonym für den Merkmaltypnamen des Iterators iterator_traits<RandomIterator>:: pointer.

Beispiel

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

Ein Typ, mit dem ein Verweis auf ein Element bereitgestellt wird, das von reverse_iterator adressiert wird.

typedef typename iterator_traits<RandomIterator>::reference reference;

Hinweise

Der Typ ist ein Synonym für den Iterator-Typnamen iterator_traits<RandomIterator>::reference.

Beispiel

Beispiele zum Deklarieren und Verwenden finden Sie reverse_iterator::operator[] unter reverse_iterator::operator* .reference

reverse_iterator::reverse_iterator

Erstellt aus einem zugrunde liegenden Iterator einen standardmäßigen reverse_iterator oder reverse_iterator.

reverse_iterator();
explicit reverse_iterator(RandomIterator right);

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

Parameter

right
Der Iterator, der auf reverse_iterator angepasst werden soll.

Rückgabewert

Erstellt aus einem zugrunde liegenden Iterator einen standardmäßigen reverse_iterator oder reverse_iterator.

Hinweise

Die Identität, die alle umgekehrten Iteratoren auf die zugrunde liegenden Iteratoren bezieht:

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

In der Praxis bedeutet dies, dass in der umgekehrten Sequenz das reverse_iterator-Objekt auf das Element verweist, das eine Position hinter dem Element (rechts davon) liegt, auf das der Iterator in der ursprünglichen Sequenz verwiesen hat. Wenn ein Iterator das Element 6 in der Sequenz adressierte (2, 4, 6, 8), dann adressiert reverse_iterator das Element 4 in der umgekehrten Sequenz (8, 6, 4, 2).

Beispiel

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

Siehe auch

<iterator>
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz