Range-basert for-løkke med containere
Iterer ryddig over containere med C++11-syntaksen for range-baserte for-løkker.
Range-basert for-løkke med containere er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Den moderne løkken
C++11 introduserte den range-baserte for-løkken – iterer over enhver container uten eksplisitte indekser eller iteratorer. Koden blir ryddigere og vanskeligere å gjøre feil.
std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
std::cout << x << " ";
}Med verdi
Eksempelet ovenfor kopierer hvert element til x. Det er greit for billige typer som int, men kostbart for store objekter.
Med const-referanse
For ikke-trivielle typer brukes const auto& for å unngå kopier og vise at elementene ikke skal endres.
std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
std::cout << name << "\n";
}Med referanse for endring
Bruk en vanlig referanse for å endre elementene på stedet.
std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
x *= 10;
}
// v is now {10, 20, 30}auto for typetolking
La kompilatoren utlede elementtypen. Med strenger, vektorer av strukturer og map-er sparer dette mye skriving.
Iterere over en map
Hvert element er en std::pair<const Key, Value>. Bruk strukturerte bindinger (C++17) for ryddigere kode.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << "\n";
}Iterere over strenger
En std::string er en container med char-verdier.
std::string s = "hello";
for (char c : s) {
std::cout << c << " ";
}Løkker over initializer-lister
En range-løkke kan iterere direkte over en liste omsluttet av krøllparenteser.
for (int n : {1, 2, 4, 8, 16}) {
std::cout << n << " ";
}Omvendt range-basert løkke
En standard range-for går fremover. Bruk std::ranges::reverse_view (C++20) eller manuelle omvendte iteratorer for å iterere baklengs.
#include <ranges>
for (auto x : v | std::views::reverse) {
std::cout << x;
}Begrensninger
En range-for kan ikke:
- vite gjeldende indeks uten en separat teller
- hoppe over elementer eller endre containeren under iterasjon
- iterere over to containere parallelt (bruk en vanlig for-løkke eller zip)
Egendefinerte typer i range-for
For at en egen klasse skal fungere med range-for, må den ha medlemmene begin() og end(), eller frie funksjoner som returnerer iteratorer.
Hurtigsjekk
Hvilken form for range-basert for-løkke endrer elementene i containeren?
Oppsummering
Range-basert for er den ryddigste måten å iterere på. Bruk const auto& som standard, auto& for å gjøre endringer, og strukturerte bindinger for å dele opp par og tupler.
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Range-basert for-løkke med containere» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Range-basert for-løkke med containere», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Range-basert for-løkke med containere»?
Iterer ryddig over containere med C++11-syntaksen for range-baserte for-løkker. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C++ Academy?
Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Range-basert for-løkke med containere»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?
Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Forgrening: if-else, ternary, switch-case
- Løkkemønstre: for, while, do-while
- Range-basert for-løkke med containere
- Tidlige returer, break, continue og goto