logo

Op bereik gebaseerd for-lus in C++

In dit onderwerp bespreken we de op bereik gebaseerde for-lus in de programmeertaal C++. De C++-taal introduceerde een nieuw concept van de op bereik gebaseerde for-lus in C++11 en latere versies, wat veel beter is dan de reguliere For-lus. Een op bereik gebaseerde for-lus vereist geen grote codering om lus-iteratie te implementeren. Het is een sequentiële iterator die elk element van de container over een bereik (van begin tot eind) herhaalt.

Op bereik gebaseerd for-lus in C++

Syntaxis

 for (range_declaration : range_expression ) loop statement 
    bereik_declaratie:Het wordt gebruikt om een ​​variabele te declareren waarvan het type hetzelfde is als de typen van de verzamelde elementen die worden weergegeven door de range_expression of een verwijzing naar dat type.bereik_expressie:Het definieert een uitdrukking die de geschikte reeks elementen vertegenwoordigt.lusverklaring:Het definieert de hoofdtekst van de op bereik gebaseerde for-lus die een of meer instructies bevat die herhaaldelijk moeten worden uitgevoerd tot het einde van de bereikexpressie.

Opmerking: als we het gegevenstype van de containerelementen niet weten, kunnen we het auto-trefwoord gebruiken dat automatisch het gegevenstype van de range_expression identificeert.

Programma om elk element van de array af te drukken met behulp van een bereik op basis van een lus

Laten we een voorbeeld bekijken om de int- en double-array af te drukken met behulp van de op bereik gebaseerde for-lus in C++.

programma.cpp

Java-standaardparameters
 #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; } 

Uitvoer

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Programma om de vector binnen bereik te demonstreren op basis van een lus

Laten we een eenvoudig programma schrijven om de vector binnen bereik te implementeren op basis van een lus.

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

Uitvoer

concat-tekenreeksen java
 5 10 25 20 25 

Programma om de arrays af te drukken met behulp van Range based for loop in C++ met referentie

Laten we een voorbeeld bekijken om de array-elementen af ​​te drukken met behulp van een op bereik gebaseerde for-lus in C++.

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

Uitvoer

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

Geneste, op bereik gebaseerde for-lus

Wanneer een lus wordt gedefinieerd binnen de hoofdtekst van een andere lus, wordt de lus een geneste for-lus genoemd. Op dezelfde manier, wanneer we een bereik definiëren in een lus binnen een andere op bereik gebaseerde lus, staat de techniek bekend als een geneste, op bereik gebaseerde for-lus.

hashing in de datastructuur

Syntaxis:

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

In de bovenstaande syntaxis definiëren we één op bereik gebaseerde for-lus binnen een andere lus. Hier noemen we de binnenste en buitenste bereikgebaseerde for-lus in C++.

Programma om de geneste, op bereik gebaseerde for-lus in C++ af te drukken

Overweeg een voorbeeld om het geneste bereik op basis van de lus in de programmeertaal C++ te demonstreren.

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

Uitvoer

 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 

Wat is het verschil tussen traditionele for-loops en op bereik gebaseerde for-loops?

A traditioneel voor lus wordt gebruikt om het codeblok herhaaldelijk uit te voeren totdat de opgegeven voorwaarde waar is. Een traditionele for-lus heeft drie parameters: initialisatie van de variabele, specificeer de voorwaarde, en de laatste is een teller die met één wordt verhoogd als de voorwaarde waar blijft.

Syntaxis:

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

Op bereik gebaseerde lus

zonnige del

Aan de andere kant hebben we een nieuwe, op bereik gebaseerde for-lus beschikbaar in de C++ 11 en latere versie. Het heeft twee parameters: bereikdeclaratie en de range_-expressie. Het wordt ook gebruikt om het codeblok herhaaldelijk over een bereik uit te voeren.

Syntaxis

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

De range_declaration wordt gebruikt om het type variabele te declareren dat gerelateerd is aan de range_expression (container). De range_expression: Het is net als een container die dezelfde soorten elementen op een sequentiële manier bevat. De loop_statement definieert de instructie die binnen de for-lus wordt uitgevoerd.

Voordelen van de op bereik gebaseerde for-lus

  1. Het is gemakkelijk te gebruiken en de syntaxis is ook eenvoudig.
  2. Voor een op bereik gebaseerde for-lus hoeft het aantal elementen in een container niet te worden berekend
  3. Het herkent de begin- en eindelementen van de containers.
  4. We kunnen de grootte en elementen van de container eenvoudig aanpassen.
  5. Er wordt geen kopie van de elementen gemaakt.
  6. Het is veel sneller dan de traditionele for-lus.
  7. Meestal wordt het auto-trefwoord gebruikt om het gegevenstype van de containerelementen te herkennen.

Nadeel van de op bereik gebaseerde for-lus

  1. Het kan een deel van een lijst niet doorlopen.
  2. Het kan niet worden gebruikt om in omgekeerde volgorde te reizen
  3. Het kan niet worden gebruikt in verwijzingen.
  4. Het biedt niet de mogelijkheid om de huidige elementen te indexeren.