So ändern Sie einen Satz in einen Vektor in C ++

So ändern Sie einen Satz in einen Vektor in C ++
Ein Satz kann wie folgt in C ++ erstellt werden:
Satz p = 'j', 'i', 'h', 'g', 'f';

Danach gibt es eine interne Sortierung und die Werte des Satzes werden wie folgt anhand der Standardeinstellungen angeordnet:

'F', 'g', 'H', 'I', 'J'

Wenn der Satz in einen Vektor umgewandelt wird, wird diese neue Anordnung aufrechterhalten, bis es geändert wird. Um das in einem C ++ - Programm festgelegte SET zu codieren, muss die festgelegte Bibliothek enthalten sein. Um den Vektor in einem C ++ - Programm zu codieren, muss die Vektorbibliothek enthalten sein.

Es gibt eine Reihe von Möglichkeiten, einen Set in einen Vektor zu ändern. In diesem Artikel werden drei einfache Wege erklärt. Zwei dieser in diesem Artikel zu erläuterten Methoden befassen sich mit Mitgliedern der Vektorklasse. Die andere Methode befasst sich mit der Kopiefunktion der Algorithmusbibliothek.

Reichen von set

Eine Reihe von Elementen kann aus einem Satz erhalten werden. Dieser Bereich würde nicht das letzte angegebene Element enthalten. Der Bereich erscheint in zwei Iteratoren des gleichen Typs für einen Satz. Das folgende Programm zeigt dies:

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

Satz st = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator itb = st.Start(); set :: iterator ite = st.Ende();
ITB ++; ite--;
für (set:: iterator it = itb; Es != ITE; es ++)
Cout << *it << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

G, h, ich,

Denken Sie daran, dass die Werte im Set basierend auf den Standardeinstellungen nach dem Einfügen in aufsteigender Reihenfolge neu angeordnet wurden. Der Iterator ITB zeigt kurz vor dem ersten Element des nachgeordneten Sets zuerst. Der Iterator ITE zeigt zuerst über das letzte Element des nachgeordneten Sets hinaus. "ITB ++" verweist dann auf das zweite Element, während "ITE-" dann auf das letzte Element für den Bereich zeigt. Dieses letzte Element wird nicht in den Bereich enthalten sein.

Der For-Loop druckt den Bereich aus, ['G', 'H', 'I' [mit Ausschluss von 'J' wie es sollte.

Bei der Umwandlung des gesamten Satzes in einen Vektor muss der gesamte Bereich des Satzes verwendet werden. ITB oder ITE sollte also weder inkrementiert noch dekrementiert werden.

Der Bereichsvektorkonstruktor

Der Vektorkonstruktor, der einen Bereich als Argumente nimmt, lautet:

Vorlage
contexpr vector (InputIterator zuerst, InputIterator Last, Const Allocator & = Allocator ());

Wenn das dritte Argument nicht angegeben ist, wird der Standardwert durch c ausgewählt++. Vergleich dieser Syntax mit dem obigen Code, wäre zuerst ITB und zuletzt es wäre es.

Dieser Konstruktor kann daher zum Umwandeln eines Sets in einen Vektor verwendet werden. Das folgende Programm zeigt dies:

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

Satz st = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator itb = st.Start(); set :: iterator ite = st.Ende();
Vektor vtr (itb, ite);
für (int i = 0; iCout << vtr[i] << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F, g, h, ich, j,

sortiert. Das Allocator -Argument wurde im Code weggelassen. Der quadratische Klammern wurde verwendet, um die Werte des Vektors zu erhalten, bei denen die sortierten Werte aus dem Satz waren.

Dies war eine Möglichkeit, einen Set in einen Vektor umzuwandeln oder zu ändern. Die anderen beiden Möglichkeiten werden als nächstes erklärt:

Vektorzuordnungsmitgliedfunktion

Eine der Syntaxe für die Vektor -Member -Funktion ist:

Vorlage
contexpr void zuordnen (InputIterator zuerst, InputIterator zuletzt)

Es dauert einen Bereich als Argumente, zuerst und zuletzt für denselben festgelegten Iterator. In dieser Situation muss der leere Vektor zuerst konstruiert werden. Danach fügt die Zuweisungsmethode alle Elemente des Sets zum Vektor hinzu. Der festgelegte Inhalt bleibt unverändert, aber immer noch sortiert. Das folgende Programm zeigt die Verwendung der Funktionsmitgliedfunktion:

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

Satz st = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator itb = st.Start(); Satz:: iterator ite = st.Ende();
Vektor vtr;
vtr.zuweisen (ITB, ITE);
für (set:: iterator it = itb; Es != ITE; es ++) Cout << *it << ", "; cout << endl;
für (int i = 0; iRückkehr 0;

Die Ausgabe ist:

F, g, h, ich, j,
F, g, h, ich, j,

Die erste für die Schleife besteht darin, den unveränderten festgelegten Inhalt anzuzeigen. Die zweite besteht darin, den Vektor anzuzeigen, dessen Inhalt am Anfang der des sortierten Satzes ist.

Dies war die zweite Methode, um einen Satz in einen Vektor zu konvertieren oder zu ändern. Die Erklärung für die dritte Methode für diesen Artikel folgt:

Eine Copy () -Funktion in der Bibliothek von Algorithmus

Die Syntax einer der Kopienfunktionen in der Algorithmus -Bibliothek lautet:

Vorlage
CONTEXPR OUTPUTICERATOR Kopie (InputIterator zuerst, InputIterator Last, OutputIterator -Ergebnis)

Im Fall von Vector ist der Return -Iterator sowohl ein Eingangs -Iterator als auch ein Ausgabe -Iterator gleichzeitig. Wenn P ein Eingangs -Iterator ist, würde *P den Wert zurückgeben, auf den P durch p gezeigt wird. Wenn P ein Ausgabe -Iterator ist, kann *P einen Wert für den Speicherort erhalten, auf den P von P hingewiesen wird.

Die ersten und zweiten Argumente hier sind die gleichen wie bei der vorherigen Funktion. Das Argumentergebnis ist ein Outputiterator, der auf das erste Element des Vektors verweist.

Der Rückgabereiter verweist hier kurz nach dem letzten Element des Vektors. Dies bedeutet, dass der Vektor mit einer Größe erstellt werden muss, die mindestens der Größe des Satzes entspricht.

Mit dieser Copy () -Funktion muss die Algorithmus -Bibliothek in das Programm aufgenommen werden, da die Funktion in der Algorithmus -Bibliothek liegt. Der folgende Code in der Funktion c ++ main () zeigt, wie die Kopierfunktion verwendet wird:

Satz st = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator itb = st.Start(); set :: iterator ite = st.Ende();
Vektor vtr (10);
Vektor:: iterator outit = copy (itb, ite, vtr.Start());
vtr.Größenänderung (Outit - VTR.Start());
für (set:: iterator it = itb; Es != ITE; es ++) Cout << *it << ", "; cout << endl;
für (int i = 0; iRückkehr 0;

Die Ausgabe ist:

F, g, h, ich, j,
F, g, h, ich, j,

Der zurückgegebene Outputiterator ist vom Vektor. Der Vektor musste sich auf die Anzahl der Elemente, die im Set enthalten sind. Der Inhalt des Sets änderte sich nicht.

Abschluss

Ein Satz kann unter Verwendung des Bereichs Vektorkonstruktors oder der Vektor -Member -Funktion oder der Funktion der Algorithmus Library Copy () in einen Vektor geändert werden. Es gibt andere weniger leicht zu codierende Methoden - siehe später.