Iteration over vektorer: indeks, range-for, iteratorer
Iterér over en vektor med indeksadgang, range-for og eksplicitte iteratorer
Iteration over vektorer: indeks, range-for, iteratorer er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 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.
Tre måder at gennemløbe på
Du kan gennemløbe en vektor med:
- Indeksbaseret
for (size_t i = 0; i < v.size(); ++i) - Områdebaseret
for (auto& x : v) - Iteratorer
for (auto it = v.begin(); it != v.end(); ++it)
Indeksbaseret løkke
Kendt fra C. Nyttig, når du har brug for indekset sammen med værdien.
for (size_t i = 0; i < v.size(); ++i) {
std::cout << i << ": " << v[i] << "\n";
}size_t kontra int
size() returnerer size_t — en fortegnsløs type. Hvis du blander den med en tæller af typen int, får du compileradvarsler og subtile fejl. Brug size_t eller C++20 std::ssize.
Områdebaseret for
Den reneste form, når du ikke har brug for indekser. Vælg den rigtige referencekvalifikator.
for (const auto& x : v) std::cout << x << " "; // read only
for (auto& x : v) x *= 2; // modify in placeIteratorer
En iterator er en generaliseret pointer. v.begin() peger på det første element, mens v.end() peger lige efter det sidste.
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}const_iterator
Brug cbegin() og cend(), når du ikke har brug for at ændre elementerne — iteratortypen er const_iterator.
Omvendte iteratorer
rbegin() og rend() gennemløber fra sidst til først. Dereferering giver de samme elementer, men i omvendt rækkefølge.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}Iteratoraritmetik
Vektoriteratorer giver tilfældig adgang: du kan lægge heltal til og trække dem fra samt sammenligne med <.
auto it = v.begin();
it += 3; // skip 3 elements
std::cout << *it;Algoritmer bruger iteratorer
STL-algoritmer tager iteratorpar. Giv v.begin(), v.end() videre til algoritmer som std::sort eller std::find.
#include <algorithm>
std::sort(v.begin(), v.end());
auto it = std::find(v.begin(), v.end(), 42);Når iteratorer bliver ugyldige
Tilføjelser til en vektor kan udløse omallokering. Alle iteratorer, pointere og referencer til vektoren bliver ugyldige efter enhver operation, der ændrer kapaciteten.
Faldgrube: Ændring under gennemløb
Kald aldrig push_back eller erase i en områdebaseret for-løkke over den samme vektor. Byg en ny vektor, eller indsaml de indekser, der skal behandles, og gør det bagefter.
Hurtig kontrol
Hvilken form for gennemløb gør sin iterator ugyldig, hvis push_back udløser en omallokering?
Opsummering
Vælg områdebaseret for, når du ikke har brug for indekser, indeksbaseret for, når du har, og iteratorbaseret for, når du arbejder med algoritmer. Ommallokering gør iteratorer ugyldige — kald aldrig push_back under gennemløb.
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 “Iteration over vektorer: indeks, range-for, iteratorer” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Iteration over vektorer: indeks, range-for, iteratorer”, 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 “Iteration over vektorer: indeks, range-for, iteratorer”?
Iterér over en vektor med indeksadgang, range-for og eksplicitte iteratorer 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 2 af 4.
Hvor lang tid tager lektionen “Iteration over vektorer: indeks, range-for, iteratorer”?
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
- Grundlæggende std::vector: push_back, size, capacity
- Iteration over vektorer: indeks, range-for, iteratorer
- Ændring af vektorer: insert, erase, clear
- Vector kontra std::array kontra C-array