W tym temacie omówimy pętlę for opartą na zakresie w języku programowania C++. Język C++ wprowadził nową koncepcję pętli for opartej na zakresach w C++ 11 i nowszych wersjach, która jest znacznie lepsza niż zwykła pętla For. Pętla for oparta na zakresie nie wymaga dużego kodu do zaimplementowania iteracji pętli for. Jest to iterator sekwencyjny, który iteruje każdy element kontenera w pewnym zakresie (od początku do końca).
Składnia
for (range_declaration : range_expression ) loop statement
Uwaga: Jeśli nie znamy typu danych elementów kontenera, możemy użyć słowa kluczowego auto, które automatycznie zidentyfikuje typ danych wyrażenia range_expression.
Program wyświetlający każdy element tablicy przy użyciu pętli for
Rozważmy przykład drukowania tablicy int i double przy użyciu pętli for opartej na zakresie w 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; }
Wyjście
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Program demonstrujący wektor w zakresie w oparciu o pętlę for
Napiszmy prosty program implementujący wektor w zakresie w oparciu o pętlę for.
Program2.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; }
Wyjście
5 10 25 20 25
Program do drukowania tablic przy użyciu pętli for opartej na Range w C++ z referencją
Rozważmy przykład drukowania elementów tablicy przy użyciu pętli for opartej na zakresie w 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; }
Wyjście
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
Zagnieżdżona pętla for oparta na zakresie
Kiedy pętla jest zdefiniowana w treści innej pętli, nazywa się ją zagnieżdżoną pętlą for. Podobnie, gdy definiujemy zakres w pętli wewnątrz innej pętli opartej na zakresach, technika ta nazywana jest zagnieżdżoną pętlą for opartą na zakresie.
Składnia:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
W powyższej składni definiujemy jedną pętlę for opartą na zakresie wewnątrz innej pętli. Tutaj w C++ nazywamy pętlę for opartą na wewnętrznym i zewnętrznym zakresie.
Program do drukowania zagnieżdżonej pętli for w języku C++
Rozważmy przykład ilustrujący zagnieżdżony zakres oparty na pętli for w języku programowania C++.
Zakres.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; }
Wyjście
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
Jaka jest różnica między tradycyjną pętlą for a pętlą for opartą na zakresie?
A tradycyjna pętla for służy do wielokrotnego wykonywania bloku kodu, aż określony warunek zostanie spełniony. Tradycyjna pętla for ma trzy parametry: inicjalizację zmiennej, określenie warunku, a ostatni to licznik, który jest zwiększany o jeden, jeśli warunek pozostaje spełniony.
Składnia:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Pętla oparta na zakresie
Z drugiej strony mamy nową pętlę for opartą na zakresach dostępną w wersji C++ 11 i nowszych. Ma dwa parametry, deklarację zakresu i wyrażenie range_. Służy również do wielokrotnego wykonywania bloku kodu w pewnym zakresie.
Składnia
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
Deklaracja_zakresu służy do deklarowania typu zmiennej powiązanej z wyrażeniem_zakresu (kontenerem). Wyrażenie_zakresu: Przypomina kontener, w którym przechowywane są elementy tego samego typu w sposób sekwencyjny. Instrukcja pętli definiuje instrukcję, która jest wykonywana wewnątrz pętli for.
Zalety pętli for opartej na zakresie
- Jest łatwy w użyciu, a jego składnia jest również prosta.
- Pętla for oparta na zakresach nie wymaga obliczania liczby elementów w kontenerach
- Rozpoznaje początkowe i końcowe elementy kontenerów.
- W łatwy sposób możemy modyfikować wielkość i elementy kontenera.
- Nie tworzy żadnej kopii elementów.
- Jest znacznie szybsza niż tradycyjna pętla for.
- Zwykle używa słowa kluczowego auto do rozpoznawania typu danych elementów kontenera.
Wada pętli for opartej na zakresie
- Nie może przechodzić przez część listy.
- Nie można go używać do przemieszczania się w odwrotnej kolejności
- Nie można go używać we wskaźnikach.
- Nie oferuje indeksowania bieżących elementów.