HOWTO · C++

Schleifen über ein Array in C++

Dieser Artikel zeigt, wie man über ein Array in C++ iteriert

Auf dieser Seite

Ein Array speichert eine feste Anzahl von Elementen desselben Typs. Um jedes Element zu durchlaufen, wählen Sie eine Schleife danach aus, ob Sie den Index benötigen, Elemente ändern möchten oder lieber einen Algorithmus mit einer aufrufbaren Funktion verwenden. Die folgenden Beispiele definieren jeweils ein eigenes Array und eine eigene main-Funktion und können deshalb als separate Programme kompiliert werden. (C++)

Eine indizierte for-Schleife verwenden

Bei einer indizierten Schleife ist die aktuelle Position über i verfügbar. Ihre drei Ausdrücke initialisieren den Index, prüfen, ob er noch innerhalb des Arrays liegt, und erhöhen ihn nach jedem Durchlauf. Der Vergleich verwendet < count, denn ein Array mit fünf Elementen hat gültige Indizes von 0 bis 4.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <iostream>

int main() {
    int values[] = {10, 20, 30, 40, 50};
    const int count = sizeof(values) / sizeof(values[0]);

    for (int i = 0; i < count; ++i) {
        std::cout << values[i] << ' ';
    }
    std::cout << '\n';
}
10 20 30 40 50

Der Ausdruck sizeof berechnet die Anzahl der Elemente, solange values noch ein Array ist. Wenn Sie das Array an eine Funktion übergeben, wird es dort als Zeiger behandelt. Übergeben Sie die Anzahl daher separat oder verwenden Sie einen Container, der seine Größe mitführt. Richten Sie die Bedingung an dieser Anzahl aus und erhöhen Sie i bei jedem Durchlauf genau einmal, damit Sie nicht über das letzte Element hinaus zugreifen.

Eine while-Schleife verwenden

Eine while-Schleife eignet sich, wenn die Fortsetzungsbedingung komplexer ist als eine einfache Zählung. Für einen Array-Durchlauf initialisieren Sie den Index vor der Schleife, prüfen ihn vor dem Zugriff auf das Element und erhöhen ihn im Schleifenrumpf. Wird die Aktualisierung vergessen, kann die Schleife endlos laufen.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <iostream>

int main() {
    int values[] = {5, 15, 25, 35};
    const int count = sizeof(values) / sizeof(values[0]);
    int i = 0;

    while (i < count) {
        std::cout << values[i] << ' ';
        ++i;
    }
    std::cout << '\n';
}
5 15 25 35

Dabei werden die Elemente in der Reihenfolge ihrer Indizes besucht. Verwenden Sie eine for-Schleife, wenn Initialisierung, Bedingung und Aktualisierung zusammengehören; eine while-Schleife eignet sich, wenn die Bedingung oder Aktualisierung von anderen Vorgängen im Schleifenrumpf abhängt.

Eine bereichsbasierte for-Schleife verwenden

Eine bereichsbasierte Schleife besucht jedes Element direkt, ohne einen Index ausdrücklich anzugeben. Eine einfache Variable vom Typ int value ist eine Kopie. Das eignet sich für kleine Werte, wenn die Schleife sie nur liest. Verwenden Sie const int&, um Kopien zu vermeiden und die Elemente schreibgeschützt zu lassen, oder int&, wenn die Schleife das ursprüngliche Array ändern soll.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <iostream>

int main() {
    int values[] = {1, 2, 3, 4, 5};

    for (const int& value : values) {
        std::cout << value << ' ';
    }
    std::cout << '\n';
}
1 2 3 4 5

Wenn Sie beispielsweise die Schleifenvariable in int& value ändern und value einen Wert zuweisen, wird das entsprechende Array-Element aktualisiert. Diese Schreibweise ist knapp, wenn alle Elemente der Reihe nach verarbeitet werden und die Position selbst nicht benötigt wird.

Mit std::for_each über ein Array iterieren

std::for_each ist ein Algorithmus, keine Methode. Er erhält zuerst die Iteratoren auf den Anfang und die Position direkt hinter dem Ende eines Bereichs, gefolgt von einer aufrufbaren Funktion, die für jedes Element aufgerufen wird. Binden Sie <algorithm> für den Algorithmus und <array> für std::array ein.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <algorithm>
#include <array>
#include <iostream>

int main() {
    std::array<int, 4> values = {2, 4, 6, 8};

    std::for_each(values.begin(), values.end(), [](int value) {
        std::cout << value * 2 << ' ';
    });
    std::cout << '\n';
}
4 8 12 16

In diesem Beispiel ist die Lambda-Funktion die aufrufbare Funktion. Ihr Parameter int value kopiert jedes Element. Verwenden Sie int& value, wenn die Funktion das Array ändern soll. begin() bezeichnet das erste Element und end() die Position direkt hinter dem letzten. Damit erhält der Algorithmus den vollständigen zu durchlaufenden Bereich.

Die passende Schleife für Ihre Aufgabe wählen

Verwenden Sie eine indizierte for-Schleife, wenn Sie die Position benötigen, ein Element mit einem Nachbarelement vergleichen oder die Schrittweite zwischen Positionen steuern möchten. Eine while-Schleife passt, wenn eine separate Bedingung bestimmt, wann der Durchlauf endet. Wählen Sie eine bereichsbasierte for-Schleife für den direkten, gut lesbaren Zugriff auf jedes Element. Verwenden Sie dabei eine Referenz, wenn Sie Kopien vermeiden oder Werte ändern möchten. Nutzen Sie std::for_each, wenn sich die Verarbeitung als aufrufbare Funktion in einen algorithmusbasierten Ansatz einfügt. Mit jeder dieser Formen lässt sich ein Array durchlaufen. Entscheiden Sie anhand der Informationen und der Steuerungsmöglichkeiten, die Ihre Aufgabe erfordert, und halten Sie indizierte Zugriffe innerhalb des gültigen Array-Bereichs.