Tässä aiheessa käsittelemme aluepohjaista for-silmukkaa C++-ohjelmointikielessä. C++-kieli esitteli uuden käsitteen aluepohjaisesta for-silmukasta C++11:ssä ja uudemmissa versioissa, mikä on paljon parempi kuin tavallinen For-silmukka. Aluepohjainen silmukka ei vaadi suurta koodausta silmukan iteroinnin toteuttamiseksi. Se on peräkkäinen iteraattori, joka iteroi säilön jokaisen elementin tietyllä alueella (alusta loppuun).
Syntaksi
for (range_declaration : range_expression ) loop statement
Huomautus: Jos emme tiedä säilöelementtien tietotyyppiä, voimme käyttää automaattista avainsanaa, joka tunnistaa automaattisesti range_expression tietotyypin.
Ohjelma tulostaa jokaisen taulukon elementin käyttämällä silmukkaan perustuvaa aluetta
Tarkastellaan esimerkkiä int- ja double-taulukon tulostamisesta käyttämällä aluepohjaista for-silmukkaa C++:ssa.
program.cpp
cpld vs fpga
#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; }
Lähtö
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Ohjelma havainnollistaa vektorin vaihteluvälillä silmukalle
Kirjoitetaan yksinkertainen ohjelma vektorin toteuttamiseksi silmukan perusteella.
Ohjelma2.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; }
Lähtö
5 10 25 20 25
Ohjelma tulostaa taulukot käyttämällä Range-pohjaista for-silmukkaa C++:ssa viitteellä
Tarkastellaan esimerkkiä taulukon elementtien tulostamisesta käyttämällä aluepohjaista for-silmukkaa C++:ssa.
Ohjelma3.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; }
Lähtö
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
Sisäkkäinen aluepohjainen silmukalle
Kun silmukka määritellään toisen silmukan rungossa, silmukkaa kutsutaan sisäkkäiseksi silmukaksi. Vastaavasti, kun määritämme alueen silmukassa toisen aluepohjaisen silmukan sisällä, tekniikka tunnetaan sisäkkäisenä aluepohjaisena silmukana.
Syntaksi:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
Yllä olevassa syntaksissa määritämme yhden aluepohjaisen silmukan toisen silmukan sisällä. Tässä kutsutaan sisä- ja ulkoaluepohjaiseksi silmukaksi C++:ssa.
Ohjelma tulostaa sisäkkäisen aluepohjaisen silmukan C++:ssa
Harkitse esimerkkiä C++-ohjelmointikielen silmukkaan perustuvan sisäkkäisen alueen havainnollistamiseksi.
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; }
Lähtö
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
Mitä eroa on perinteisen silmukan ja aluepohjaisen silmukan välillä?
A perinteinen silmukalle käytetään koodilohkon suorittamiseen toistuvasti, kunnes määritetty ehto on tosi. Perinteisessä for-silmukassa on kolme parametria, muuttujan alustus, ehto, ja viimeinen on laskuri, jota kasvatetaan yhdellä, jos ehto pysyy tosi.
Syntaksi:
int merkkijonoon javassa
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Aluepohjainen silmukka
Toisaalta meillä on uusi aluepohjainen for loop saatavilla C++ 11:ssä ja uudemmissa versioissa. Siinä on kaksi parametria, alueen määritys ja range_-lauseke. Sitä käytetään myös toistuvasti suorittamaan koodilohko tietyllä alueella.
Syntaksi
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
Alue_ilmoitusta käytetään määrittämään vaihteluvälin_lausekkeeseen (säilö) liittyvän muuttujan tyyppi. Range_expression: Se on aivan kuin säiliö, joka sisältää samantyyppisiä elementtejä peräkkäin. Loop_statement määrittää käskyn, joka suoritetaan silmukan sisällä.
Aluepohjaisen silmukan edut
- Sitä on helppo käyttää, ja sen syntaksi on myös yksinkertainen.
- Aluepohjainen for-silmukka ei vaadi säilön elementtien lukumäärän laskemista
- Se tunnistaa säiliöiden alku- ja loppuelementit.
- Voimme helposti muokata säiliön kokoa ja elementtejä.
- Se ei luo kopiota elementeistä.
- Se on paljon nopeampi kuin perinteinen for loop.
- Se käyttää yleensä automaattista avainsanaa tunnistamaan säilöelementtien tietotyypin.
Aluepohjaisen silmukan haitta
- Se ei voi kulkea luettelon osan läpi.
- Sitä ei voi käyttää ajamiseen käänteisessä järjestyksessä
- Sitä ei voi käyttää osoittimissa.
- Se ei tarjoa nykyisten elementtien indeksointia.