range-based for loop (tsz. range-based for loops)
for
ciklusnak C++-ban. Elsősorban tömbök és konténerek (pl. vector
, array
, map
, set
) elemeinek bejárására használjuk. Az iterációt automatikusan kezeli, így nem kell külön változót inicializálni és indexeket kezelni.
for (adatTípus változó : kollekció) {
// Ciklus törzse
}
#include <iostream>
int main() {
int tomb = {10, 20, 30, 40, 50};
for (int szam : tomb) {
std::cout << szam << " ";
}
return 0;
}
Kimenet:
10 20 30 40 50
for
ciklus automatikusan végigmegy a tomb
tömb minden elemén, és az aktuális értéket szam
változóba helyezi.std::cout << szam
kiírja az értékeket szóközzel elválasztva.
A std::vector
dinamikus méretű konténer, amelyet gyakran használunk C++-ban.
#include <iostream>
#include <vector>
int main() {
std::vector<int> szamok = {5, 10, 15, 20, 25};
for (int szam : szamok) {
std::cout << szam << " ";
}
return 0;
}
Kimenet:
5 10 15 20 25
std::vector<int>
egy dinamikus tömb, amelyet a ciklus ugyanúgy bejár, mint a hagyományos tömböt.for (int szam : szamok)
ciklus végigmegy a szamok
vektor minden elemén.
Ha az elemek másolása helyett referencia szerint szeretnénk dolgozni, használjuk az &
operátort:
#include <iostream>
#include <vector>
int main() {
std::vector<int> szamok = {1, 2, 3, 4, 5};
for (int& szam : szamok) {
szam *= 2; // Minden elem értékét megduplázzuk
}
for (int szam : szamok) {
std::cout << szam << " ";
}
return 0;
}
Kimenet:
2 4 6 8 10
&
)?int szam : szamok
), akkor a for
ciklus minden egyes elemet másolatként ad át a szam
változónak.int& szam : szamok
formát használunk, akkor közvetlenül az eredeti elemeket módosítjuk.
const
referencia – Ha nem akarjuk módosítani az adatokatHa biztosak akarunk lenni abban, hogy a ciklus nem módosítja az eredeti adatokat, használhatjuk a const
kulcsszót:
#include <iostream>
#include <vector>
int main() {
std::vector<std::string> nevek = {"Anna", "Béla", "Cecília"};
for (const std::string& nev : nevek) {
std::cout << nev << " ";
}
return 0;
}
Kimenet:
Anna Béla Cecília
const std::string& nev
megakadályozza az elemek módosítását, miközben elkerüli a felesleges másolásokat.
std::map
-pel (asszociatív tömb)Az std::map
kulcs-érték párokat tárol, és a tartomány alapú for
ciklus segítségével könnyedén bejárható.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> diakok = {{"Anna", 95}, {"Béla", 88}, {"Cecília", 78}};
for (const auto& par : diakok) {
std::cout << par.first << " pontszáma: " << par.second << std::endl;
}
return 0;
}
Kimenet:
Anna pontszáma: 95 Béla pontszáma: 88 Cecília pontszáma: 78
par.first
→ a kulcs (pl. név)par.second
→ az érték (pl. pontszám)auto&
használata megkönnyíti az iterációt, mert az std::map<std::string, int>::value_type
típus hosszan írható lenne.
structured bindings
a map
bejárásáraC++17 óta struktúrált kötésekkel (structured bindings
) közvetlenül két változóba bonthatjuk a kulcs-érték párokat:
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> diakok = {{"Anna", 95}, {"Béla", 88}, {"Cecília", 78}};
for (const auto& : diakok) {
std::cout << nev << " pontszáma: " << pontszam << std::endl;
}
return 0;
}
: Az std::pair
automatikusan szétbontásra kerül.
for
és tartomány alapú for
között
for
ciklus (indexalapú)#include <vector>
#include <iostream>
int main() {
std::vector<int> szamok = {1, 2, 3, 4, 5};
for (size_t i = 0; i < szamok.size(); i++) {
std::cout << szamok << " ";
}
return 0;
}
for
(egyszerűbb, biztonságosabb)for (int szam : szamok) {
std::cout << szam << " ";
}
✅ Tartomány alapú for ciklus: egyszerűbb és hatékonyabb megoldás tömbök, vektorok, map
és egyéb konténerek bejárására.
✅ Használjunk referenciát (&
), ha el akarjuk kerülni az értékek másolását.
✅ const &
használata ajánlott, ha csak olvasni akarjuk az adatokat.
✅ C++17 struktúrált kötés még kényelmesebb megoldás map
bejárására.