C++ Academy · leksjon

Range-basert for-løkke med containere

Iterer ryddig over containere med C++11-syntaksen for range-baserte for-løkker.

Leksjon 3 av 413 trinn

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.

Gratis å komme i gang

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

  1. Forgrening: if-else, ternary, switch-case
  2. Løkkemønstre: for, while, do-while
  3. Range-basert for-løkke med containere
  4. Tidlige returer, break, continue og goto
← Tilbake til C++ Academy