Iteriert ein STD -Set in C ++

Iteriert ein STD -Set in C ++
Das Folgende ist eine Reihe von Fruchtnamen: "Passionsfrucht", "Banane", "Watermelon", "Blackberry", "Grape"

In C ++ ist ein so typisierter Satz ein Set buchstäblich oder ein Array -Literal. Es ist auch die Initializer_List. In C ++ ist ein Iterator eine Klasse. Obwohl es sich um eine Klasse handelt, verhält sich sein Objekt wie ein Zeiger. Wenn es inkrementiert ist, zeigt es auf das nächste Element. Wenn es dekrementiert ist, weist es auf das vorherige Element hin. So wie der Zeiger vom Indirektionoperator deren Präparate geliefert werden kann. Es gibt verschiedene Arten von Iteratoren für den Set in C++. In diesem Artikel werden die verschiedenen Iteratoren für das Set und die Art und Weise erläutert, wie sie verwendet werden.

Ein Programm zum Codieren des obigen Satzes oder einer beliebigen Menge sollte mit Folgendem beginnen:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

Die erste Zeile enthält die iOstream -Bibliothek. Dies ist für das Terminal (Konsole) erforderlich. Die zweite Zeile enthält die SET -Bibliothek. Dies ist für die Set -Programmierung erforderlich. Die dritte Zeile enthält die String -Bibliothek. Um Strings zu verwenden, muss die String -Klasse enthalten sein. Ansonsten sind es die Zeiger auf die Saiten, die sortiert werden und nicht die alphabetischen Literale der Streicher selbst. Dies sind alle Unterbriebraren aus der Hauptstandardbibliothek in C++. STD im Titel dieses Artikels bedeutet Standard. Die vierte Zeile ist keine Richtlinie. Es ist eine Aussage. Es besteht darauf, dass jeder in dem Programm verwendete Name, dem der Benutzernamenspace nicht vorausgeht, aus dem Standard -Namespace stammt.

Die Iteratorklasse muss nicht enthalten sein. Es ist bereits in der Set -Klasse.

Hinweis: Nachdem Werte in den Satz eingefügt wurden, werden sie intern in aufsteigender Reihenfolge mit Standardeinstellungen sortiert.

Iterator

Dieses Iterator -Klassenobjekt wird von den Memberfunktionen der Start () oder end () der festgelegten Klasse zurückgegeben. Die Funktion "start ()) gibt einen Iterator zurück, der auf das erste Element des Satzes verweist. Die Member -Funktion der End () gibt einen Iterator zurück, der kurz nach dem letzten Element des Satzes zeigt.

Dieser Iterator arbeitet mit dem == oder != Operator, funktioniert aber nicht mit den Operatoren. Obwohl dieser Iterator nicht offiziell konstant ist, kann der Wert, auf den er hinweist, möglicherweise nicht geändert werden. Der folgende Code zeigt, wie dieser Iterator verwendet wird:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: iterator iter = st.Start(); Iter != ST.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Banane, Blackberry, Traube, Passionsfrucht, Wassermelone,

Um den Wert eines Satzes zu ändern (zu ändern), muss die Löschfunktion des Satzes verwendet werden, um das Element zu löschen. Danach kann ein neuer Wert eingefügt werden. Nach dem Einfügen wird es eine interne Sortierung geben, und der Wert passt möglicherweise nicht genau dort, wo der alte Wert war. Das Ändern oder Ändern des Wertes (oder Elements) eines Satzes ist eine Diskussion für einige andere Zeit - siehe später.

Reverse_iterator

Dies ist das Gegenteil des obigen Iterators. Dieses Objekt Reverse_iterator -Klassen wird von den Member -Funktionen rbegin () oder rend () der Set -Klasse zurückgegeben. Die Rbegin () -Mitglied -Funktion gibt einen Iterator zurück, der auf das letzte Element des Satzes verweist. Die Rend () -Mitglied -Funktion gibt einen Iterator zurück, der kurz vor dem ersten Element des Satzes zeigt.

Dieser Reverse_iterator funktioniert mit dem == oder != Operator, funktioniert aber nicht mit den Operatoren. Obwohl dieser Iterator nicht offiziell konstant ist, kann der Wert, auf den er hinweist, möglicherweise nicht geändert werden. Der folgende Code zeigt, wie dieser Iterator verwendet wird:

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: Reverse_iterator iter = st.rbegin (); Iter != ST.zerreißen(); Iter ++)
Cout << *iter << ", ";
Cout << endl;

Die Ausgabe ist:

Wassermelone, Passionsfrucht, Traube, Blackberry, Banane,
in umgekehrter Reihenfolge sortiert.

const_iterator

Dieses Objekt der const_iterator -Klasse wird von den Member -Funktionen von cBegin () oder cend () der festgelegten Klasse zurückgegeben. Die Rbegin () -Mitglied -Funktion gibt einen const_iterator zurück, der auf das erste Element des Satzes verweist. Die Rend () -Mitlerfunktion gibt einen const_iterator zurück, der kurz nach dem letzten Element des Satzes zeigt.

Dieser const_iterator funktioniert mit dem == oder != Operator, funktioniert aber nicht mit den Operatoren. Dieser Iterator ist offiziell konstant und der Wert, auf den er hinweist, kann nicht geändert werden. Der folgende Code zeigt, wie dieser Iterator verwendet wird:

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: const_iterator iter = st.cbegin (); Iter != ST.cend (); Iter ++)
Cout << *iter << ", ";
Cout << endl;

Die Ausgabe ist:

Banane, Blackberry, Traube, Passionsfrucht, Wassermelone,

const_reverse_iterator

Dies ist das Gegenteil des obigen Iterators. Dieses Objekt const_reverse_iteratorklasse wird von den Mitgliedern der CRBEGIN () oder cREND () der SET -Klasse zurückgegeben. Die Crbegin () -Mitglied -Funktion gibt einen Iterator zurück, der auf das letzte Element des Satzes verweist. Die CREEND () -Mitglied -Funktion gibt einen Iterator zurück, der kurz vor dem ersten Element des Satzes zeigt.

Dieser const_reverse_iterator funktioniert mit dem == oder != Operator, funktioniert aber nicht mit den Operatoren. Dieser Iterator ist offiziell konstant und der Wert, auf den er hinweist, kann nicht geändert werden. Der folgende Code zeigt, wie dieser Iterator verwendet wird:

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: const_reverse_iterator iter = st.crbegin (); Iter != ST.Crend (); Iter ++)
Cout << *iter << ", ";
Cout << endl;

Die Ausgabe ist

Wassermelone, Passionsfrucht, Traube, Blackberry, Banane,
in umgekehrter Reihenfolge sortiert.

const_iterator cbegin () und cend ()

cbegin () gibt einen bedingungslosen konstanten Iterator auf das erste Element des Satzes zurück. cend () gibt einen bedingungslosen konstanten Iterator zurück, der kurz nach dem letzten Element des Satzes findet. Der folgende Code zeigt, wie es verwendet wird:

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: const_iterator iter = st.cbegin (); Iter != ST.cend (); Iter ++)
Cout << *iter << ", ";
Cout << endl;

Die Ausgabe ist:

Banane, Blackberry, Traube, Passionsfrucht, Wassermelone,
const_reverse_iterator crbegin () und crend ​​()

Dies ist das Gegenteil von dem oben genannten. Der folgende Code zeigt, wie es verwendet wird:

Satz ST ("Passionsfrucht", "Banane", "Wassermelone", "Blackberry", "Grape");
für (set:: const_reverse_iterator iter = st.crbegin (); Iter != ST.Crend (); Iter ++)
Cout << *iter << ", ";
Cout << endl;

Die Ausgabe ist:

Wassermelone, Passionsfrucht, Traube, Blackberry, Banane,

Abschluss

Alle Iteratoren, die von den Mitgliedsfunktionen des festgelegten Objekts zurückgegeben wurden, funktionieren mit dem == oder != Operator, aber nicht mit den Operatoren funktionieren. Alle von ihnen können inkrementiert oder verringert werden. Alle Iteratoren, die von den Mitgliedsfunktionen des Satzes zurückgegeben werden, sind direkt oder indirekt konstant. Dies bedeutet, dass die Werte, auf die sie hinweisen, nicht mit dem Iterator geändert werden können.

Um den Wert eines Satzes zu ändern (zu ändern), muss die Löschfunktion des Satzes verwendet werden, um das Element zu löschen. Danach kann ein neuer Wert eingefügt werden. Nach dem Einfügen wird es eine interne Sortierung geben, und der Wert passt möglicherweise nicht genau dort, wo der alte Wert war. Das Ändern oder Ändern des Wertes (oder Elements) eines Satzes ist eine Diskussion für einige andere Zeit - siehe später.