Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Führt statement
für jedes Element in expression
wiederholt und nacheinander aus.
Syntax
for (
for-range-declaration:
expression)
Anweisung
Hinweise
Verwenden Sie die bereichsbasierte for
-Anweisung, um Schleifen zu erstellen, die über einen Bereichausgeführt werden müssen, der als alles definiert ist, was Sie durchlaufen können—, z. B. std::vector
oder eine andere C++-Standardbibliothekssequenz, deren Bereich durch eine begin()
und end()
definiert wird. Der Name, der im for-range-declaration
-Teil deklariert ist, ist lokal für die for
-Anweisung und kann nicht in expression
oder statement
erneut deklariert werden. Beachten Sie, dass das auto
-Schlüsselwort im for-range-declaration
-Teil der Anweisung bevorzugt wird.
Neu in Visual Studio 2017: Bereichsbasierte for
-Schleifen erfordern nicht mehr, dass begin()
und end()
Objekte desselben Typs zurückgeben. Dadurch kann end()
ein Sentinelobjekt zurückgeben, das von Bereichen verwendet wird, die im Ranges-V3-Vorschlag definiert sind. Weitere Informationen finden Sie unter Generalisieren einer bereichsbasierten For
-Schleife und der range-v3-Bibliothek in 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 der folgenden in statement
ausgeführt wird: eine break
, return
oder goto
einer beschrifteten Anweisung außerhalb der bereichsbasierten for
-Schleife. Mit einer continue
-Anweisung in einer bereichsbasierten for
-Schleife wird nur die aktuelle Iteration beendet.
Beachten Sie diese Punkte zu bereichsbasierten for
-Schleifen:
Erkennt Arrays automatisch.
Erkennt Container, die über
.begin()
und.end()
verfügen.Verwendet die argumentabhängigen Suche
begin()
undend()
für alles andere.
Weitere Informationen
auto
Iterationsanweisungen
Schlüsselwörter
while
-Anweisung (C++)
do-while
-Anweisung (C++)
for
-Anweisung (C++)