logo

Aluepohjainen silmukalle C++:ssa

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).

Aluepohjainen silmukalle C++:ssa

Syntaksi

 for (range_declaration : range_expression ) loop statement 
    range_declaration:Sitä käytetään ilmoittamaan muuttuja, jonka tyyppi on sama kuin range_lausekkeen tai viittauksen tähän tyyppiin edustamien kerättyjen elementtien tyypit.range_expression:Se määrittelee lausekkeen, joka edustaa sopivaa elementtisarjaa.silmukkalause:Se määrittää aluepohjaisen for-silmukan rungon, joka sisältää yhden tai useamman lausekkeen, joka suoritetaan toistuvasti range-lausekkeen loppuun asti.

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

  1. Sitä on helppo käyttää, ja sen syntaksi on myös yksinkertainen.
  2. Aluepohjainen for-silmukka ei vaadi säilön elementtien lukumäärän laskemista
  3. Se tunnistaa säiliöiden alku- ja loppuelementit.
  4. Voimme helposti muokata säiliön kokoa ja elementtejä.
  5. Se ei luo kopiota elementeistä.
  6. Se on paljon nopeampi kuin perinteinen for loop.
  7. Se käyttää yleensä automaattista avainsanaa tunnistamaan säilöelementtien tietotyypin.

Aluepohjaisen silmukan haitta

  1. Se ei voi kulkea luettelon osan läpi.
  2. Sitä ei voi käyttää ajamiseen käänteisessä järjestyksessä
  3. Sitä ei voi käyttää osoittimissa.
  4. Se ei tarjoa nykyisten elementtien indeksointia.