Freigeben über


move_iterator-Klasse

Die Klassenvorlage move_iterator ist ein Wrapper für einen Iterator. Das move_iterator-Objekt stellt das gleiche Verhalten bereit wie der Iterator, der es umschließt bzw. speichert, außer, dass der Dereferenzierungsoperator des gespeicherten Iterators in einen rvalue-Verweis und somit ein Kopier- in ein Verschiebevorgang verwandelt wird. Weitere Informationen zu rvalues finden Sie unter Rvalue-Verweisdeklarator: &&.

template<class Iterator>
    class move_iterator {
public:
    typedef Iterator iterator_type;
    typedef typename    
        iterator_traits<Iterator>::iterator_category
            iterator_category;
    typedef typename iterator_traits<Iterator>::value_type
        value_type;
    typedef typename iterator_traits<Iterator>::difference_type
        difference_type;
    typedef Iterator
        pointer;
    typedef value_type&&
        reference;

    move_iterator();
    explicit move_iterator (Iterator right);
    template<class Type>
        move_iterator (const move_iterator<Type>& right);
    template <class Type> 
        move_iterator& operator=(const move_iterator<Type>& right);

    iterator_type base () const;
    reference operator* () const;
    pointer operator-> () const;

    move_iterator& operator++ ();
    move_iterator operator++ (int);
    move_iterator& operator-- ();
    move_iterator operator-- (int);

    move_iterator& operator+= (difference_type off);
    move_iterator operator+ (difference_type off) const;
    move_iterator& operator-= (difference_type off);
    move_iterator operator- (difference_type off) const;
    reference operator[] (difference_type off) const;
    };

Hinweise

Die Vorlagenklasse beschreibt ein Objekt, das sich wie ein Iterator verhält, außer wenn es dereferenziert wird. Sie speichert einen Random-Access-Iterator vom Typ Iterator, auf den über die Memberfunktion base() zugegriffen wird. Alle Vorgänge für ein move_iterator werden direkt für den gespeicherten Iterator ausgeführt, außer dass das Ergebnis von operator* implizit in value_type&& umgewandelt wird, um einen rvalue-Verweis zu erstellen.

Ein move_iterator kann Vorgänge ausführen, die nicht vom umschlossenen Iterator definiert werden. Diese Vorgänge sollten nicht verwendet werden.

Konstruktoren

move_iterator

Der Konstruktor für Objekte des Typs move_iterator.

Typedefs

move_iterator::iterator_type

Ein Synonym für den Vorlagenparameter RandomIterator.

move_iterator::iterator_category

Als Synonym für einen längeren typename-Ausdruck desselben Namens identifiziert iterator_category die allgemeinen Fähigkeiten des Iterators.

move_iterator::value_type

Als Synonym für einen längeren typename-Ausdruck desselben Namens beschreibt value_type den Typ der Iteratorelemente.

move_iterator::difference_type

Als Synonym für einen längeren typename-Ausdruck desselben Namens beschreibt difference_type den ganzzahligen Typ, der benötigt wird, um Unterschiedswerte zwischen Elementen auszudrücken.

move_iterator::pointer

Ein Synonym für den Vorlagenparameter RandomIterator.

move_iterator::reference

Ein Synonym für den rvalue-Verweis value_type&&.

Memberfunktionen

move_iterator::base

Die Memberfunktion gibt den gespeicherten Iterator zurück, der von diesem move_iterator umschlossen wird.

Operators

move_iterator::operator*

Gibt (reference)*base(). zurück.

move_iterator::operator++

Erhöht den gespeicherten Iterator. Das genaue Verhalten hängt davon ab, ob es sich um einen Präinkrement- oder einen Postinkrementvorgang handelt.

move_iterator::operator--

Verringert den gespeicherten Iterator. Das genaue Verhalten hängt davon ab, ob es sich um einen Prädekrement- oder einen Postdekrementvorgang handelt.

move_iterator::operator->

Gibt &**this zurück.

move_iterator::operator-

Gibt move_iterator(*this) -= zurück, indem der Wert auf der rechten Seite zuerst von der aktuellen Position subtrahiert wird.

move_iterator::operator[]

Gibt (reference)*(*this + off) zurück. Ermöglicht es Ihnen, ein Offset von der aktuellen Basisklasse anzugeben, um den Wert an diesem Speicherort abzurufen.

move_iterator::operator+

Gibt den Wert move_iterator(*this) += zurück. Ermöglicht es Ihnen, ein Offset zur Basisklasse hinzuzufügen, um den Wert an diesem Speicherort abzurufen.

move_iterator::operator+=

Fügt dem Wert auf der rechten Seite dem gespeicherten Iterator hinzu und gibt *this zurück.

move_iterator::operator-=

Subtrahiert den Wert auf der rechten Seite vom gespeicherten Iterator und gibt *this zurück.

Anforderungen

Header: <Iterator>

Namespace: std

Siehe auch

Aufgaben

Gewusst wie: Schreiben eines Bewegungskonstruktors

Referenz

<iterator>

Lvalues und Rvalues

Standardvorlagenbibliothek