In diesem Thema besprechen wir die bereichsbasierte for-Schleife in der Programmiersprache C++. Die C++-Sprache führte in C++11 und späteren Versionen ein neues Konzept der bereichsbasierten for-Schleife ein, das viel besser ist als die reguläre For-Schleife. Eine bereichsbasierte for-Schleife erfordert keinen großen Programmieraufwand für die Implementierung der for-Schleifeniteration. Es handelt sich um einen sequentiellen Iterator, der jedes Element des Containers über einen Bereich (vom Anfang bis zum Ende) iteriert.
Syntax
for (range_declaration : range_expression ) loop statement
Hinweis: Wenn wir den Datentyp der Containerelemente nicht kennen, können wir das Schlüsselwort auto verwenden, das den Datentyp des Bereichsausdrucks automatisch identifiziert.
Programm zum Drucken jedes Elements des Arrays mithilfe einer Range-basierten for-Schleife
Betrachten wir ein Beispiel zum Drucken des int- und double-Arrays mithilfe der bereichsbasierten for-Schleife in C++.
program.cpp
#include using namespace std; int main () { int arr1 [5] = { 10, 20, 30, 40, 50}; double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 }; // use range based for loop for ( const auto &var : arr1 ) { cout << var << ' ' ; } // use auto keyword to automatically specify the data type of darr container. for ( const auto &var : darr ) { cout << var << ' ' ; } return 0; }
Ausgabe
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Programm zur Demonstration des Vektors im Bereich basierend auf einer for-Schleife
Schreiben wir ein einfaches Programm, um den Vektor in einer Range-basierten for-Schleife zu implementieren.
Programm2.cpp
#include #include using namespace std; int main() { int x; // declare integer variable // declare vector variable vector vect = {5, 10 , 25, 20, 25}; // display vector elements for ( int x : vect) { cout << x << ' '; } return 0; }
Ausgabe
5 10 25 20 25
Programm zum Drucken der Arrays mithilfe einer Range-basierten for-Schleife in C++ mit Referenz
Betrachten wir ein Beispiel zum Drucken der Array-Elemente mithilfe einer bereichsbasierten for-Schleife in C++.
Program3.cpp
#include #include #include using namespace std; int main(){ array data = {1, 3, -2, 4, 6, 7, 9}; cout << ' Before updating the elements: ' << endl; for (int x : data){ cout << x << ' '; } // pass the references for (int &itemRef : data){ itemRef *= 3; } cout << endl << ' After modification of the elements: ' << endl; for (int x : data){ cout << x << ' '; } cout << endl; return 0; }
Ausgabe
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
Verschachtelte bereichsbasierte for-Schleife
Wenn eine Schleife innerhalb des Körpers einer anderen Schleife definiert wird, wird die Schleife als verschachtelte for-Schleife bezeichnet. Wenn wir einen Bereich in einer Schleife innerhalb einer anderen bereichsbasierten Schleife definieren, wird die Technik ebenfalls als verschachtelte bereichsbasierte for-Schleife bezeichnet.
Syntax:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
In der obigen Syntax definieren wir eine bereichsbasierte for-Schleife innerhalb einer anderen Schleife. Hier rufen wir in C++ eine innere und äußere bereichsbasierte for-Schleife auf.
Programm zum Drucken der verschachtelten bereichsbasierten for-Schleife in C++
Betrachten Sie ein Beispiel, um die verschachtelte bereichsbasierte for-Schleife in der Programmiersprache C++ zu demonstrieren.
Range.cpp
#include using namespace std; int main () { int arr1[4] = { 0, 1, 2, 3 }; int arr2[5] = { 1, 2, 3, 4, 5 }; // use nested range based for loop for ( int x : arr1 ) { // declare nested loop for ( int y : arr2 ) { cout << ' x = ' << x << ' and j = ' << y << endl; } } return 0; }
Ausgabe
x = 0 and j = 1 x = 0 and j = 2 x = 0 and j = 3 x = 0 and j = 4 x = 0 and j = 5 x = 1 and j = 1 x = 1 and j = 2 x = 1 and j = 3 x = 1 and j = 4 x = 1 and j = 5 x = 2 and j = 1 x = 2 and j = 2 x = 2 and j = 3 x = 2 and j = 4 x = 2 and j = 5 x = 3 and j = 1 x = 3 and j = 2 x = 3 and j = 3 x = 3 and j = 4 x = 3 and j = 5
Was ist der Unterschied zwischen einer herkömmlichen for-Schleife und einer bereichsbasierten for-Schleife?
A traditionelle for-Schleife wird verwendet, um den Codeblock wiederholt auszuführen, bis die angegebene Bedingung wahr ist. Eine herkömmliche for-Schleife verfügt über drei Parameter: Initialisierung der Variablen, Angabe der Bedingung und der letzte Parameter ist ein Zähler, der um eins erhöht wird, wenn die Bedingung wahr bleibt.
Syntax:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Bereichsbasierte Schleife
Andererseits steht in C++ 11 und späteren Versionen eine neue bereichsbasierte for-Schleife zur Verfügung. Es verfügt über zwei Parameter: die Bereichsdeklaration und den Bereichsausdruck. Es wird auch verwendet, um den Codeblock über einen Bereich hinweg wiederholt auszuführen.
Syntax
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
Die „range_declaration“ wird verwendet, um den Typ der Variablen zu deklarieren, die sich auf den „range_expression“ (Container) bezieht. Der Bereichsausdruck: Es ist wie ein Container, der nacheinander dieselben Elementtypen enthält. Das loop_statement definiert die Anweisung, die in der for-Schleife ausgeführt wird.
kein Eingangssignal
Vorteile der bereichsbasierten for-Schleife
- Es ist einfach zu bedienen und auch die Syntax ist einfach.
- Eine bereichsbasierte for-Schleife erfordert nicht die Berechnung der Anzahl der Elemente in einem Container
- Es erkennt die Anfangs- und Endelemente der Container.
- Wir können die Größe und Elemente des Containers problemlos ändern.
- Es wird keine Kopie der Elemente erstellt.
- Sie ist viel schneller als die herkömmliche for-Schleife.
- Normalerweise wird das Schlüsselwort auto verwendet, um den Datentyp der Containerelemente zu erkennen.
Nachteil der bereichsbasierten for-Schleife
- Es kann keinen Teil einer Liste durchlaufen.
- Es kann nicht zum Durchlaufen in umgekehrter Reihenfolge verwendet werden
- Es kann nicht in Zeigern verwendet werden.
- Eine Indizierung der aktuellen Elemente ist nicht möglich.