C++ Academy · Lektion

Områdebaseret for-løkke med containere

Iterér enkelt over containere med C++11's områdebaserede for-syntaks

Lektion 3 af 413 trin

Områdebaseret for-løkke med containere er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Den moderne løkke

C++11 introducerede for-løkken baseret på et interval — gennemløb enhver container uden eksplicitte indekser eller iteratorer. Det er mere overskueligt og sværere at gøre forkert.

std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
    std::cout << x << " ";
}

Efter værdi

Eksemplet ovenfor kopierer hvert element ind i x. Det er fint for billige typer som int, men dyrt for store objekter.

Med const-reference

Brug ved ikke-trivielle typer const auto& for at undgå kopier og signalere, at du ikke ændrer elementerne.

std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
    std::cout << name << "\n";
}

Med reference ved ændringer

Brug en almindelig reference til at ændre elementer direkte på stedet.

std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
    x *= 10;
}
// v is now {10, 20, 30}

auto til typeudledning

Lad compileren udlede elementtypen. Med strenge, vektorer af strukturer og opslagstabeller sparer det meget indtastning.

Gennemløb af en map

Hvert element er en std::pair<const Key, Value>. Brug strukturerede bindinger (C++17) for at få mere overskuelig kode.

std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

Gennemløb af strenge

En std::string er en container med char-elementer.

std::string s = "hello";
for (char c : s) {
    std::cout << c << " ";
}

Løkker over initialiseringslister

Du kan gennemløbe en liste omgivet af krøllede parenteser direkte med en intervalbaseret løkke.

for (int n : {1, 2, 4, 8, 16}) {
    std::cout << n << " ";
}

Omvendt intervalbaseret løkke

En almindelig intervalbaseret for-løkke går fremad. Brug std::ranges::reverse_view (C++20) eller manuelle omvendte iteratorer til gennemløb baglæns.

#include <ranges>
for (auto x : v | std::views::reverse) {
    std::cout << x;
}

Begrænsninger

En intervalbaseret for-løkke kan ikke:

  • Kende det aktuelle indeks uden en separat tæller
  • Springe elementer over eller ændre containeren under gennemløbet
  • Gennemløbe to containere parallelt (brug en almindelig for-løkke eller zip)

Tilpassede typer i intervalbaserede for-løkker

For at få din egen klasse til at fungere med en intervalbaseret for-løkke skal du levere medlemmerne begin() og end() eller frie funktioner, der returnerer iteratorer.

Hurtigt tjek

Hvilken form af en intervalbaseret for-løkke ændrer elementer i containeren?

Opsummering

En intervalbaseret for-løkke er den mest overskuelige måde at gennemløbe på. Brug som standard const auto&, auto& til ændringer og strukturerede bindinger til at pakke par og tupler ud.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Områdebaseret for-løkke med containere” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Områdebaseret for-løkke med containere”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Områdebaseret for-løkke med containere”?

Iterér enkelt over containere med C++11's områdebaserede for-syntaks Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Områdebaseret for-løkke med containere”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forgrening: if-else, ternær operator, switch-case
  2. Løkkemønstre: for, while, do-while
  3. Områdebaseret for-løkke med containere
  4. Tidlige returneringer, break, continue og goto
← Tilbage til C++ Academy