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::vector
deren 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 statement
deklariert 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
, return
oder 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()
undend()
für alles andere.
Siehe auch
auto
Iterationsanweisungen
Schlüsselwörter
while
-Anweisung (C++)
do-while
-Anweisung (C++)
for
-Anweisung (C++)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für