Områdebaseret for-løkke med containere
Iterér enkelt over containere med C++11's områdebaserede for-syntaks
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.
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
- Forgrening: if-else, ternær operator, switch-case
- Løkkemønstre: for, while, do-while
- Områdebaseret for-løkke med containere
- Tidlige returneringer, break, continue og goto