logo

Boucle for basée sur une plage en C++

Dans cette rubrique, nous aborderons la boucle for basée sur une plage dans le langage de programmation C++. Le langage C++ a introduit un nouveau concept de boucle for basée sur une plage dans C++11 et les versions ultérieures, qui est bien meilleur que la boucle For classique. Une boucle for basée sur une plage ne nécessite pas de codage volumineux pour implémenter l'itération de la boucle for. Il s'agit d'un itérateur séquentiel qui itère chaque élément du conteneur sur une plage (du début à la fin).

Boucle for basée sur une plage en C++

Syntaxe

 for (range_declaration : range_expression ) loop statement 
    range_declaration :Il est utilisé pour déclarer une variable dont le type est le même que les types des éléments collectés représentés par range_expression ou référence à ce type.expression_plage :Il définit une expression qui représente la séquence appropriée d'éléments.instruction de boucle :Il définit le corps de la boucle for basée sur une plage qui contient une ou plusieurs instructions à exécuter de manière répétée jusqu'à la fin de l'expression de plage.

Remarque : Si nous ne connaissons pas le type de données des éléments du conteneur, nous pouvons utiliser le mot-clé auto qui identifie automatiquement le type de données de range_expression.

Programme pour imprimer chaque élément du tableau en utilisant une boucle for basée sur une plage

Prenons un exemple pour imprimer les tableaux int et double à l'aide de la boucle for basée sur une plage en C++.

programme.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; } 

Sortir

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Programme pour démontrer le vecteur dans la plage basée sur la boucle

Écrivons un programme simple pour implémenter le vecteur dans une plage basée sur une boucle for.

Programme2.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; } 

Sortir

 5 10 25 20 25 

Programme pour imprimer les tableaux en utilisant la boucle for basée sur Range en C++ avec référence

Prenons un exemple pour imprimer les éléments du tableau en utilisant une boucle for basée sur une plage en C++.

Programme3.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; } 

Sortir

 Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27 

Boucle for basée sur une plage imbriquée

Lorsqu’une boucle est définie à l’intérieur du corps d’une autre boucle, la boucle est appelée boucle for imbriquée. De même, lorsque nous définissons une plage dans une boucle à l’intérieur d’une autre boucle basée sur une plage, la technique est connue sous le nom de boucle for imbriquée basée sur une plage.

Syntaxe:

 for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed } 

Dans la syntaxe ci-dessus, nous définissons une boucle for basée sur une plage dans une autre boucle. Ici, nous appelons une boucle for basée sur une plage interne et externe en C++.

Programme pour imprimer la boucle for basée sur une plage imbriquée en C++

Prenons un exemple pour démontrer la plage imbriquée basée sur la boucle for dans le langage de programmation C++.

Plage.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; } 

Sortir

 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 

Quelle est la différence entre la boucle for traditionnelle et la boucle for basée sur une plage ?

UN boucle for traditionnelle est utilisé pour exécuter à plusieurs reprises le bloc de code jusqu'à ce que la condition spécifiée soit vraie. Une boucle for traditionnelle a trois paramètres, l'initialisation de la variable, spécifier la condition, et le dernier est un compteur qui est incrémenté de un si la condition reste vraie.

Syntaxe:

 for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; } 

Boucle basée sur la plage

D'autre part, nous avons une nouvelle boucle for basée sur une plage disponible dans la version C++ 11 et ultérieure. Il a deux paramètres, la déclaration de plage et l'expression range_. Il est également utilisé pour exécuter à plusieurs reprises le bloc de code sur une plage.

Syntaxe

 for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; } 

La range_declaration est utilisée pour déclarer le type de variable liée à la range_expression (conteneur). L'expression_range : c'est comme un conteneur qui contient les mêmes types d'éléments de manière séquentielle. Le loop_statement définit l'instruction qui est exécutée à l'intérieur de la boucle for.

Avantages de la boucle for basée sur la plage

  1. Il est facile à utiliser et sa syntaxe est également simple.
  2. Une boucle for basée sur une plage ne nécessite pas le calcul du nombre d'éléments dans un conteneur
  3. Il reconnaît les éléments de début et de fin des conteneurs.
  4. Nous pouvons facilement modifier la taille et les éléments du conteneur.
  5. Il ne crée aucune copie des éléments.
  6. C'est beaucoup plus rapide que la boucle for traditionnelle.
  7. Il utilise généralement le mot-clé auto pour reconnaître le type de données des éléments du conteneur.

Inconvénient de la boucle for basée sur la plage

  1. Il ne peut pas parcourir une partie d'une liste.
  2. Il ne peut pas être utilisé pour traverser dans l'ordre inverse
  3. Il ne peut pas être utilisé dans les pointeurs.
  4. Il ne propose pas d'indexer les éléments courants.