Durch einen Vektor in C ++ durchlaufen

Durch einen Vektor in C ++ durchlaufen
Durch einen Vektor zu schleifen bedeutet, von Anfang bis Ende oder vom Ende zum Anfang auf alle Elemente des Vektors zuzugreifen. Die Elemente können zum Lesen oder Schreiben (Wert ändern) oder beides zugegriffen werden.

In C ++ kann der Vektor durch die Verwendung des klassischen For-Schleifens mit dem Index (Index) in den Quadratklammern geschoben werden. Es kann durch die nutzungsbasierte Forderung geschoben werden. Es kann durch die in der Algorithmus -Bibliothek enthaltene Funktion for_each () geschaltet werden.

Artikelinhalt

- Schleifen mit dem klassischen For-Loop

- Looping mithilfe der rangebasierten Forterung

- Looping mit der Funktion for_each ()

- Abschluss

Schleifen mit dem klassischen For-Loop

Index

Betrachten Sie das folgende Codesegment:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
char ch = vtr [2];
Cout << ch << endl;

Der Ausgang ist 'C'. In der zweiten Erklärung gibt es nach dem Vektornamen VTR die Quadratklammern. Innerhalb der Quadratklammern befindet sich der Index, der auch das Vektor -Index ist. Die Indexzählung beginnt von Null. Der Index im Code ist 2, was das dritte Element des Vektors zurückgibt.

Schleifen mit dem Index

Um mit dem Index oder Iterator zu schließen, muss die For-Schleife verwendet werden. Die während der Schleife oder der Schleife kann auch verwendet werden, aber die Fürs Schleife ist am bequemsten. Die Syntax eines For-Schleife ist:

für (fange_state; while_condition; next/vorher)
// Aussagen

Vorwärts schleifen

Das folgende Programm verwendet eine For-Schleife, um einen Vektor von Charakteren (CHARS) mit dem Index voranzutreiben:

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

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
für (int i = 0; ichar ch = vtr [i];
Cout << ch << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

A b c d e

Die Vektorbibliothek muss aufgenommen werden, damit die Vektorklasse verwendet wird. In der C ++-Hauptfunktion ist nach der Erstellung des Vektors der For-Loop. Diese For-Schleife kann wie folgt zusammengefasst werden: Lesen Sie jedes Element des Vektors ab Index, 0; Und während das Ende des Vektors noch nicht erreicht ist, erhöhen Sie den Index um 1, um das nächste Element zu lesen.

Die Klammern der For-Schleife haben die Logik, was als nächstes lesen soll, während der Block des For-Loop die Lektüre und Drucken am Terminal (Konsole) erledigt.

Vorwärts schleifen und überspringen

In der obigen Schleife lautet die nächste Aussage in den Klammern i++. Dies ist das gleiche wie:

i = i + 1

Damit werden die Elemente nacheinander in die Vorwärtsrichtung gelesen. Um jedes andere Element zu lesen (jedes Mal ein Element überspringen), muss das nächste Argument in den Klammern sein

i = i + 2; das ist das gleiche wie i+= 2;

Der folgende Code liest jedes andere Charakter vor:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
für (int i = 0; ichar ch = vtr [i];
Cout << ch << ";

Cout << endl;

Die Ausgabe ist:

A c e
überspringen 'B' und 'D'.

Rückwärts schleifen

Der folgende Code verwendet eine For-Schleife, um rückwärts, einen Vektor von Charakteren (CHARS) zu schleifen:

int main ()

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
für (int i = vtr.size ()-1; ichchar ch = vtr [i];
Cout << ch << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

E d c b a

Die Schleife beginnt aus dem höchsten Index (4), der angegeben wird durch:

vtr.size ()-1

In diesem Fall gibt die Vektorelementfunktion Size () 5 zurück 5. 1 muss davon abgezogen werden, um den höchsten Index von 4 zu erhalten (die Indexzählung beginnt von 0). Um rückwärts zu schleifen, ist die vorherige Aussage in den Klammern jetzt "i-".

Rückwärts schleifen und überspringen

In der obigen Schleife lautet die vorherige Aussage i-. Dies ist das gleiche wie:

i = i - 1

Damit werden die Elemente nacheinander in umgekehrter Richtung gelesen. Um jedes andere Element zu lesen (jedes Mal ein Element überspringen), muss die vorherige Anweisung sein

i = i - 2; das ist das gleiche wie i- = 2;

Der folgende Code liest alle anderen Zeichen rückwärts vor:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
für (int i = vtr.size ()-1; ichchar ch = vtr [i];
Cout << ch << ";

Cout << endl;

Die Ausgabe ist:

E c a

überspringen 'D' und 'B'.

Looping mit einer Iteratorklasse

Ein Vektor kann mit einem Iterator geschoben werden. Es gibt sechs Vektor -Iteratorklassen. Hier werden nur zwei verwendet. Die Namen der beiden sind: Iterator und Reverse_iterator. In den Abbildungen hier wird der For-Schleife immer noch als Schleife verwendet.

Ein Iterator ist ein ausgefeilter Zeiger. Für jeden Iterator gibt es eine Klasse, aus der Objekte instanziiert werden können. Das instanziierte Objekt ist der Iterator.

Vorwärts schleifen

Das folgende Programm verwendet eine Verschlüsselung, um nach dem Iterator einen Vektor von Charakteren (CHARS) zu schleifen:

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

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
Vektor:: iterator iter = vtr.Start();
für (iter = iter; iterchar ch = *iter;
Cout << ch << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

A b c d e

Beobachten Sie, wie das Iteratorobjekt, Iter deklariert wurde. Der Vektor hat die Mitgliedsfunktion beginnt (). Dies gibt einen Iterator zurück, der auf das erste Element des Vektors verweist. Es gibt eine andere Mitgliedsfunktion, End () für den Vektor. Dies gibt einen Iterator zurück, der kurz nach dem letzten Element des Vektors zeigt. Der Iterator, der von Ende () zurückgegeben wurde, ist sehr kompatibel für den Iterator, der von begin () zurückgegeben wurde. Tatsächlich sind sie vom gleichen Typ Iterator.

In den Klammern ist der Anfangszustand:

iter = iter;

Das bedeutet, dass der linke Operand, ITER, mit dem Scannen von dem rechten Operanden beginnen sollte, auf auf den Iter zeigt.

Diese Auszeit mit Iteratoren kann wie folgt zusammengefasst werden: Lesen Sie jedes Element des Vektors, der von dem von ITER angezeigt wird; Und während das Ende des Vektors noch nicht erreicht ist, erhöhen Sie den Iterator, Iter, um auf das nächste Element zu verweisen, um das nächste Element zu lesen.

Der Körper des For-Schleife ist:

char ch = *iter;
Cout << ch << ";

Das Sternchen in dieser Position ist ein Indirektionoperator. Es erhält den Wert, auf den der Iterator vermittelt wird

Vorwärts schleifen und mit Iterator überspringen

In der obigen Schleife ist das nächste Argument Iter++. Dies ist das gleiche wie:

iter = iter + 1

Plus-eins mit dem Iterator bedeutet auf das nächste Element hinweisen. Es bedeutet nicht, die Ganzzahl 1 zum Iterator hinzuzufügen. Damit werden die Elemente nacheinander in die Vorwärtsrichtung gelesen. Um jedes andere Element zu lesen (jedes Mal ein Element überspringen), muss das nächste Argument sein

iter = iter + 2; das ist das gleiche wie iter+= 2;

Der folgende Code liest jedes andere Charakter vor:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
Vektor:: iterator iter = vtr.Start();
für (iter = iter; iterchar ch = *iter;
Cout << ch << ";

Cout << endl;

Die Ausgabe ist:

A c e

überspringen 'B' und 'D'.

Rückwärts schleifen

Der folgende Code verwendet eine für die Schleife nach hinten, einen Vektor von Charakteren (Zeichen) mit Iteratoren nach hinten:

int main ()

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
Vektor:: Reverse_iterator iter = vtr.rbegin ();
für (iter = iter; iterchar ch = *iter;
Cout << ch << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

E d c b a

Der Reverse_iterator wurde hier verwendet. Der Vektor verfügt. Es gibt eine andere Mitgliedsfunktion, Rend (), die einen Iterator zurückgibt, der kurz vor dem ersten Element des Vektors zeigt.

Um rückwärts zu schleifen, ist die vorherige Aussage in den Klammern immer noch ironischerweise „Iter ++“. Und die während der Zeit, die immer noch ironischerweise hat '<'.

Rückwärts schleifen und überspringen

In der obigen Schleife lautet die vorherige Aussage ITER++. Dies ist dasselbe wie

iter = iter + 1

Damit werden die Elemente nacheinander in umgekehrter Richtung gelesen. Um jedes Bestellelement zu lesen (jedes Mal ein Element überspringen), muss die vorherige Anweisung sein

iter = iter + 2; das ist das gleiche wie iter+= 2;

Der folgende Code liest jeden anderen Charakter rückwärts vor:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
Vektor:: Reverse_iterator iter = vtr.rbegin ();
für (iter = iter; iterchar ch = *iter;
Cout << ch << ";

Cout << endl;

Die Ausgabe ist:

E c a

überspringen 'D' und 'B'.

Looping mithilfe der rangebasierten Forterung

Die auf sich auf den Bereich basierende For-Statement ist eine bequemere Aussage, um eine Liste wie einen Vektor zu durchlaufen. Es wird nicht wirklich zum Überspringen oder Schleifen nach hinten verwendet. Die Syntax ist:

für (init-statement-optionale For-Range-Deklaration: For-Range-Initializer) Erklärung

Diesmal gibt es zwei Aussagen in den Klammern und nicht drei. Die erste Aussage ist die Erklärung einer Variablen, die das nächste Element im Vektor enthält. Diese Variable muss den gleichen Typ wie die Art der Vektorelemente haben. Das zweite Argument nach dem Dickdarm ist der Name des Vektors.

Der folgende Code zeigt, wie er verwendet werden kann:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
für (char ch: vtr)
Cout << ch << ";

Cout << endl;

Die Ausgabe ist:

A b c d e

Looping mit der Funktion for_each ()

Die Funktion for_each () wird aus der enthaltenen Algorithmusbibliothek verwendet. Die Syntax ist:

Vorlage
contexpr funktion für_each (InputIterator zuerst, InputIterator zuletzt, Funktion f);

Das erste Argument ist ein Iterator, der auf das erste Element des Vektors hinweist. Das zweite Argument ist ein Iterator, der kurz nach dem letzten Element des Vektors zeigt. Das dritte Argument ist der Name einer Funktion, deren Körper das ist, was im klassischen For-Loop wäre. Diese Funktion hat einen Parameter, und es ist die Deklaration der Variablen, die den nächsten Wert des Vektors enthält. Es muss vom gleichen Typ sein wie jedes Element im Vektor. Diese Funktion für die_each () wird nicht wirklich zum Überspringen oder Schleifen nach hinten verwendet.

Das folgende Programm zeigt, wie Sie den Funktionsaufruf for_each () und eine zugehörige Funktionsdefinition verwenden:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
void func (char ch)
Cout << ch << ";

int main ()

Vektor vtr = 'a', 'b', 'c', 'd', 'e';
for_each (vtr.begin (), vtr.end (), func);
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

A b c d e

Abschluss

Um durch einen Vektor zu schleifen, bedeutet dies, vom Anfang bis zum Ende oder vom Ende bis zum Anfang auf alle Elemente des Vektors zuzugreifen. Die Elemente können zum Lesen oder Schreiben (Wert ändern) oder beides zugegriffen werden.

In C ++ kann der Vektor mit dem klassischen For-Loop mit dem Index (Index) in den quadratischen Klammern durchlaufen werden. Es kann durch die rangebasierte Forderung geschoben werden. Es kann auch durch die Funktion für die für die Algorithmusbibliothek enthaltene FOR_EACH () -Funktion geschoben werden.