Konttien käsittely range-pohjaisella for-silmukalla
Käy kontit siististi läpi C++11:n range-pohjaisella for-syntaksilla.
Konttien käsittely range-pohjaisella for-silmukalla on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Moderni silmukka
C++11 esitteli aluepohjaisen for-silmukan — sen avulla voitte käydä minkä tahansa säiliön läpi ilman erillisiä indeksejä tai iteraattoreita. Koodi on selkeämpää ja virheiden tekeminen vaikeampaa.
std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
std::cout << x << " ";
}Arvona
Yllä oleva esimerkki kopioi jokaisen alkion muuttujaan x. Tämä sopii kevyille tyypeille, kuten tyypille int, mutta on tehotonta suurten olioiden kanssa.
const-viitteenä
Käyttäkää ei-triviaalien tyyppien kanssa const auto&-viitettä kopioiden välttämiseksi ja ilmaistaksenne, ettette muuta alkioita.
std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
std::cout << name << "\n";
}Viitteenä muokkaamista varten
Käyttäkää tavallista viitettä alkioiden muokkaamiseen paikallaan.
std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
x *= 10;
}
// v is now {10, 20, 30}auto tyyppipäättelyyn
Antakaa kääntäjän päätellä alkion tyyppi. Merkkijonojen, rakenteiden vektorien ja map-säiliöiden kanssa tämä vähentää kirjoitettavan koodin määrää huomattavasti.
Mapin läpikäynti
Jokainen alkio on tyyppiä std::pair<const Key, Value>. Käyttäkää rakenteista sidontaa (C++17), jotta koodista tulee selkeämpää.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << "\n";
}Merkkijonojen läpikäynti
std::string on tyypin char sisältävä säiliö.
std::string s = "hello";
for (char c : s) {
std::cout << c << " ";
}Alustuslistasilmukat
Voitte käydä aaltosulkeilla rajatun listan läpi suoraan aluepohjaisella silmukalla.
for (int n : {1, 2, 4, 8, 16}) {
std::cout << n << " ";
}Käänteinen aluepohjainen silmukka
Tavallinen aluepohjainen for-silmukka etenee eteenpäin. Käyttäkää käänteiseen läpikäyntiin std::ranges::reverse_view-näkymää (C++20) tai manuaalisia käänteisiä iteraattoreita.
#include <ranges>
for (auto x : v | std::views::reverse) {
std::cout << x;
}Rajoitukset
Aluepohjainen for-silmukka ei voi:
- tietää nykyistä indeksiä ilman erillistä laskuria
- ohittaa alkioita tai muokata säiliötä läpikäynnin aikana
- käydä kahta säiliötä läpi rinnakkain (käyttäkää tavallista for-silmukkaa tai zip-toimintoa)
Mukautetut tyypit aluepohjaisessa for-silmukassa
Jotta oma luokkanne toimisi aluepohjaisessa for-silmukassa, toteuttakaa sille begin()- ja end()-jäsenfunktiot tai iteraattoreita palauttavat vapaat funktiot.
Pikakysymys
Mikä aluepohjaisen for-silmukan muoto muokkaa säiliön alkioita?
Kertaus
Aluepohjainen for-silmukka on selkein tapa käydä säiliö läpi. Käyttäkää oletusarvoisesti const auto&-viitettä, auto&-viitettä muokkaamiseen ja rakenteista sidontaa parien ja monikkojen purkamiseen.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Konttien käsittely range-pohjaisella for-silmukalla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Konttien käsittely range-pohjaisella for-silmukalla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Konttien käsittely range-pohjaisella for-silmukalla”?
Käy kontit siististi läpi C++11:n range-pohjaisella for-syntaksilla. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Konttien käsittely range-pohjaisella for-silmukalla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Haarautuminen: if-else, ternary, switch-case
- Silmukkamallit: for, while, do-while
- Konttien käsittely range-pohjaisella for-silmukalla
- Varhaiset palautukset, break, continue ja goto