Iteratoren
Die STL-Funktionen machen weit verbreitete Verwendung von Iteratoren unter verschiedenen Algorithmen und Sequenzen zu übergeben, von denen sie reagiert wird.Der Name eines Typs Iterator (oder des Präfixes) gibt die Kategorie von Iteratoren an, die für diesen Typ benötigt werden.In der Reihenfolge des Machtzuwachses werden die Kategorien wie im Folgenden zusammengefasst:
Ausgabe.Ein Ausgabeiterator X kann ein gespeichertes indirektes des Werts V damit nur, nachdem er muss vor dem nächsten erhöht werden in als Speicher (*X++ = V(*)X = V,X++ (*) oderX = V, X++).
Eingabe.Ein Eingabeiterator X kann einen Singularen Werts darstellen, der Ende der Sequenz angibt.Wenn ein Eingabeiterator nicht gleich ihren END-von Sequenz Wert vergleicht, kann er ein dass der Zugriff auf das Zielobjekt indirektes des Werts V beliebig oft auf, wenn inV = * (X).Um bis zum nächsten Wert oder dem Ende der Sequenz weiterzukommen, z. B. Erhöhen Sie es in C++X, X++ oder (V = *X++).Nachdem Sie eine Kopie eines Eingabeiterators erhöhen, können keine anderen Kopien sicher verglichen werden, aufgehoben oder danach erhöht werden.
Vorwärts.Ein Vorwärtsiterator X kann eines Ausgabeiterators zum Schreiben bzw. Lesen für das Eingabeiterators eintreten.Sie können jedoch V = * (durch LesenX) * (indem Sie einfachX = V) durch einen Vorwärtsiterator geschrieben haben.Sie können mehrere Kopien von einem Vorwärtsiterator erstellen, von dem jeder unabhängig dereferenziert werden und erhöht werden kann.
Bidirektional.Ein bidirektionaler Iterator X kann eines Vorwärtsiterators stattfinden.Sie können jedoch ein bidirektionaler Iterator, als auch in dekrementiert --_ entity_X, entity_X--* =V (oderX--).
Wahlfreier Zugriff.Ein Iterator mit wahlfreier Zugriff X kann ein bidirektionaler Iterators durchgeführt werden.Sie können einen Großteil derselben Ganzzahlarithmetik für einen Iterator mit wahlfreier durchführen, dass Sie auch Zugriff auf einem Objektzeiger können.Für Nein ganzzahliges Objekt, können Sie x[N], x + Nschreiben, x - Nund N + X.
Beachten Sie, dass ein Objektzeiger eines Iterators mit wahlfreier Zugriff oder einem beliebigen anderen Iterators durchgeführt werden kann.Alle Iteratoren zugewiesen werden können bzw. kopiert werden.Es wird angenommen, dass einfache Objekte sein und wird häufig durch einen Wert und nicht durch einen Verweis übergeben und zurückgegeben.Beachten Sie außerdem, dass keiner der Vorgänge, die zuvor beschriebenen eine Ausnahme auslösen können, wenn sie in einem gültigen Iterator ausgeführt werden.
Die Hierarchie der Iterator Kategorien zusammengefasst werden kann, indem drei Sequenzen angezeigt wird.Die lesegeschützten Zugriff auf eine Sequenz, können Sie aus:
output iterator
-> forward iterator
-> bidirectional iterator
-> random-access iterator
Der rechte Pfeil bedeutet „durch“ ersetzt werden kann. Jeder Algorithmus, mit dem ein Ausgabeiterator erforderlich ist, sollte mit einem Vorwärtsiterator z. B., nicht jedoch die anderen Methode freundlich ungefähr arbeiten.
Für den schreibgeschützten Zugriff auf eine Sequenz, können Sie aus:
input iterator
-> forward iterator
-> bidirectional iterator
-> random-access iterator
Ein Eingabeiterator ist aller Kategorien. In diesem Fall wird das schwächste.
Schließlich für Lese-/Schreibzugriff auf einer Sequenz, können Sie aus:
forward iterator
-> bidirectional iterator
-> random-access iterator
Ein Objektzeiger kann als Iterator mit wahlfreier Zugriff immer erfüllen, damit er als jede Kategorie Iterator verwendet werden, wenn sie das richtige Lese-/Schreibzugriff auf die Sequenz unterstützt, die es fest.
Ein Iterator Iterator anderes als einen Objektzeiger muss die Membertypen definieren, die von der Spezialisierung **iterator_traits<Iterator>**erforderlich sind.Beachten Sie, dass diese Bedingungen erfüllt werden können, indem Sie Iterator aus der öffentlichen IteratorBasisklasse ableiten.
Diese „Algebra“ von Iteratoren sich praktisch allen anderen in der Standardvorlagenbibliothek grundlegend.Es ist wichtig, die Versprechen und die Einschränkungen für jede Kategorie Iterator zu verstehen, zu sehen, wie Iteratoren von Container und Algorithmen in STL verwendet werden.
Hinweis |
---|
Sie können auch mithilfe For Each in STL-Auflistungen zu durchlaufen.Weitere Informationen finden Sie unter Gewusst wie: Durchlaufen Sie von jedem für mit STL-Auflistung. |
Visual C++ bietet jetzt validierte Iteratoren und Debuggen von Iteratoren auf, um sicherzustellen, dass Sie nicht die Begrenzungen des Containers überschreiben.Weitere Informationen finden Sie unter Überprüfte Iteratoren und Debug- Iteratorunterstützung.