Bereichsbasiert für Anweisung (C++)

Führt statement für jedes Element in expression wiederholt und nacheinander aus.

Syntax

for (For-Range-Deklarationsausdruck:)
statement

Hinweise

Verwenden Sie die bereichsbasierte for Anweisung, um Schleifen zu erstellen, die über einen Bereich ausgeführt werden müssen, der als beliebiges Element definiert ist, das Sie durchlaufen können , z. B. oder eine andere C++-Standardbibliothekssequenz, std::vectorderen Bereich durch ein begin() und .end() Der Name, der for-range-declaration im Teil deklariert ist, ist lokal für die for Anweisung und kann nicht erneut in expression oder statementdeklariert werden. Beachten Sie, dass die auto Schlüsselwort (keyword) im for-range-declaration Teil der Anweisung bevorzugt wird.

Neu in Visual Studio 2017: Bereichsbasierte for Schleifen erfordern dies nicht mehr und end()begin() geben Objekte desselben Typs zurück. Auf diese Weise kann end() ein Sentinelobjekt zurückgegeben werden, z. B. von Bereichen, die im Bereich-V3-Vorschlag definiert sind. Weitere Informationen finden Sie unter Generalizing the Range-Based For Loop and the range-v3 library on GitHub.

Dieser Code zeigt, wie Bereichsbasierte for Schleifen zum Durchlaufen eines Arrays und eines Vektors verwendet werden:

// range-based-for.cpp
// compile by using: cl /EHsc /nologo /W4
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    // Basic 10-element integer array.
    int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    // Range-based for loop to iterate through the array.
    for( int y : x ) { // Access by value using a copy declared as a specific type.
                       // Not preferred.
        cout << y << " ";
    }
    cout << endl;

    // The auto keyword causes type inference to be used. Preferred.

    for( auto y : x ) { // Copy of 'x', almost always undesirable
        cout << y << " ";
    }
    cout << endl;

    for( auto &y : x ) { // Type inference by reference.
        // Observes and/or modifies in-place. Preferred when modify is needed.
        cout << y << " ";
    }
    cout << endl;

    for( const auto &y : x ) { // Type inference by const reference.
        // Observes in-place. Preferred when no modify is needed.
        cout << y << " ";
    }
    cout << endl;
    cout << "end of integer array test" << endl;
    cout << endl;

    // Create a vector object that contains 10 elements.
    vector<double> v;
    for (int i = 0; i < 10; ++i) {
        v.push_back(i + 0.14159);
    }

    // Range-based for loop to iterate through the vector, observing in-place.
    for( const auto &j : v ) {
        cout << j << " ";
    }
    cout << endl;
    cout << "end of vector test" << endl;
}

Hier ist die Ausgabe:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
end of integer array test

0.14159 1.14159 2.14159 3.14159 4.14159 5.14159 6.14159 7.14159 8.14159 9.14159
end of vector test

Eine bereichsbasierte for Schleife wird beendet, wenn eine dieser statement Ins ausgeführt wird: eine break, returnoder goto eine beschriftete Anweisung außerhalb der bereichsbasierten for Schleife. Eine continue Anweisung in einer bereichsbasierten for Schleife beendet nur die aktuelle Iteration.

Beachten Sie diese Fakten zu Bereichsbasierten for:

  • Erkennt Arrays automatisch.

  • Erkennt Container, die über .begin() und .end() verfügen.

  • Verwendet die argumentabhängigen Suche begin() und end() für alles andere.

Siehe auch

auto
Iterationsanweisungen
Schlüsselwörter
while-Anweisung (C++)
do-while-Anweisung (C++)
for-Anweisung (C++)