Möglichkeiten zur Initialisierung eines STD -Sets in C ++

Möglichkeiten zur Initialisierung eines STD -Sets in C ++
Das Folgende ist die Liste der Farben des Regenbogens:
"rot", "orange", "gelb", "grün", "blau", "indigo", "violett"

Dies ist ein Beispiel für ein Set buchstäblich in der Mathematik sowie in C++. Es ist auch ein Array buchstäblich. Es ist eine Reihe von Saiten. Sätze von Ganzzahlen, Schwimmern, Doppel usw., sind auch möglich.

STD steht für Standard. In diesem Artikel können Sie einen Satz als Code initialisieren. In der C ++ - Standardbibliothek befindet sich eine festgelegte Klasse in einem Modul. Initialisierung hier bedeutet, dem zum Zeitpunkt der Schöpfung Werte an das Set zu geben. Das Erstellen eines Satzes erstellt den Satz.

Ein Satz kann mit den Anfangswerten konstruiert werden. Ein Satz kann auch leer konstruiert werden und dann die nach der Erstellung eingefügten Werte.

Das SET -Modul (Subbibliothek) muss in das Programm aufgenommen werden, bevor ein festgelegtes Objekt erstellt und gleichzeitig initialisiert werden kann. Ein C ++ - Programm mit Sätzen sollte wie folgt beginnen:

#enthalten
#enthalten
Verwenden von Namespace STD;

Die erste Zeile in diesem Codesegment enthält die iStream (Sub) -Bibliothek. Wenn die Ausgabe (und Eingabe) für das Terminal (Konsole) gilt, muss die iStream -Bibliothek enthalten sein. Die zweite Zeile enthält die SET (SUB) -Bibliothek; das ist ein Muss. Die dritte Zeile ist keine Richtlinie; Es ist eine Aussage. Es besteht darauf, dass jeder Name, der verwendet wird, ohne ihn mit einem Benutzernamenspace -Namen vorzugehen.

Der Rest dieses Artikels erläutert verschiedene Möglichkeiten zur Initialisierung des Satzes während der Konstruktion mit den verschiedenen Konstruktionsmethoden. Am Ende des Artikels wird das Hinzufügen (Einfügen) Werte in die leere Menge angesprochen.

set (initializer_list, const compare & = compare (), const allocator & = allocator ())

Dies ist ein Konstruktor, um einen Satz zu erstellen. Sein erstes Argument ist die Set Initializer_List. Die Initializer_List ist die Set Literaler. Es ist dasselbe wie das Array buchstäblich. Wenn die zweite und dritte Argumente nicht eingegeben werden, werden ihre Standardargumente verwendet. Das folgende Programm zeigt diesen Konstruktor in Aktion mit seiner Initialisierung:

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

SET ST ("rot", "orange", "gelb", "grün", "blau", "indigo", "violett");
für (set :: iterator iter = st.Start(); Iter != ST.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Blau, Grün, Indigo, Orange, Rot, Violett, Gelb,

Beachten Sie, dass die Ausgabe in aufsteigender Reihenfolge sortiert ist, während die Eingabe (erstes Argument) nicht sortiert wurde.

Beachten Sie auch, dass die Stringklasse zur Verwendung von Zeichenfolgen enthalten sein muss. Ansonsten sind es die Zeiger auf die Saiten, die sortiert werden, und nicht die alphabetischen Literale der String selbst.

set & operator = (initializer_list)

Dies ist die Copy Constructor -Form des obigen Konstruktors. Es macht immer noch Initialisierung. Das folgende Programm zeigt diesen Konstruktor in Aktion mit seiner Initialisierung:

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

Setzen Sie ST = "rot", "orange", "gelb", "grün", "blau", "indigo", "violett";
für (set :: iterator iter = st.Start(); Iter != ST.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Blau, Grün, Indigo, Orange, Rot, Violett, Gelb,

Beachten Sie, dass die Ausgabe in aufsteigender Reihenfolge sortiert ist, während die Eingabe (erstes Argument) nicht sortiert wurde.

set (const set & x)

Dieser Konstruktor erstellt einen zweiten Satz mit der Kennung eines vorherigen Satzes als Argument. Unmittelbar nach der Erstellung gibt es zwei Kopien des gleichen Inhalts. Das folgende Programm zeigt diesen Konstruktor in Aktion mit seiner Initialisierung:

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

Setzen Sie ST = "rot", "orange", "gelb", "grün", "blau", "indigo", "violett";
Set ST2 (ST); //Initialisierung
für (set :: iterator iter = st2.Start(); Iter != ST2.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Blau, Grün, Indigo, Orange, Rot, Violett, Gelb,

Beachten Sie, dass die Ausgabe in aufsteigender Reihenfolge sortiert ist, während die Eingabe (erstes Argument) nicht sortiert wurde.

set & operator = (const set & x)

Dies ist ein echter Kopierkonstruktor. Es macht immer noch Initialisierung. Das folgende Programm zeigt diesen Konstruktor in Aktion mit seiner Initialisierung:

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

Setzen Sie ST = "rot", "orange", "gelb", "grün", "blau", "indigo", "violett";
Setzen Sie ST2 = ST; //Initialisierung
für (set :: iterator iter = st2.Start(); Iter != ST2.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Blau, Grün, Indigo, Orange, Rot, Violett, Gelb,

Beachten Sie, dass die Ausgabe in aufsteigender Reihenfolge sortiert ist, während die Eingabe (erstes Argument) nicht sortiert wurde.

Template Set (InputIterator zuerst, InputIterator last, const compare & comp = compare (), const allocator & = allocator ());

Dieser Konstruktor erstellt einen neuen Satz, indem ein Wertebereich aus einem anderen Satz kopiert wird. Der Bereich beginnt vom Wert, auf den zuerst und auf den Wert hingewiesen wird, auf den zuletzt hingewiesen wird. Wenn die anderen Argumente für den Konstruktor nicht eingegeben werden, werden ihre Standardargumente eingesetzt. Das Vorlagenargument ist die Iteratorklasse. Das folgende Programm zeigt diesen Konstruktor in Aktion mit seiner Initialisierung:

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

Setzen Sie ST = "rot", "orange", "gelb", "grün", "blau", "indigo", "violett";
set :: iterator iterf = st.Start(); Iterf ++;
set :: iterator iterl = st.Ende(); Iterl--;
SET ST2 (ITERF, ITERL); //Initialisierung
für (set :: iterator iter = st2.Start(); Iter != ST2.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Grün, Indigo, Orange, Rot, Violett,

Das ist nicht genau das, was möglicherweise erwartet werden könnte. Der Grund ist wie folgt:

Die Eingabe ist:

"rot", "orange", "gelb", "grün", "blau", "indigo", "violett"

Es könnte also erwartet worden sein, dass "rot" und "violett" weggelassen werden würden. Stattdessen war es "blau" und "gelb", die weggelassen wurden. Wenn nun ein ungeordnetes Satz in ein Satz eingegeben wird, wird er sortiert. Aus der sortierten Liste wurden die Werte an den extremen Enden weggelassen.

Leerer Set und einfügen ()

Das folgende Programm erstellt einen leeren Satz, bevor die Werte eingefügt werden:

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

ST ST;
st.Insert ("rot"); st.Insert ("Orange"); st.Insert ("gelb"); st.Insert ("grün");
st.Insert ("blau"); st.Insert ("Indigo"); st.insert ("violett");
für (set :: iterator iter = st.Start(); Iter != ST.Ende(); Iter ++)
Cout << *iter << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Blau, Grün, Indigo, Orange, Rot, Violett, Gelb,

Beachten Sie, dass die Ausgabe in aufsteigender Reihenfolge sortiert ist, während die Eingabe (erstes Argument) nicht sortiert wurde.

Abschluss

Die Initialisierung ist, wenn Werte hinzugefügt werden, wenn der Satz erstellt wird. Nach dieser Phase werden die Werte mit Standardeinstellungen sortiert, um aufzusteigen. Die gemeinsamen Möglichkeiten zur Initialisierung eines Sets in C ++ umfassen konventionelle Konstruktion und Kopienkonstruktion. Sie wurden oben erklärt.

Chrys