Iterera över vektorer: index, range-for och iteratorer
Iterera över en vektor med indexåtkomst, range-for och explicita iteratorer
Iterera över vektorer: index, range-for och iteratorer är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.
Tre sätt att iterera
En vektor kan gås igenom med:
- Indexbaserad
for (size_t i = 0; i < v.size(); ++i) - Intervallbaserad
for (auto& x : v) - Iteratorer
for (auto it = v.begin(); it != v.end(); ++it)
Indexbaserad loop
Välbekant från C. Användbar när indexet behöver användas tillsammans med värdet.
for (size_t i = 0; i < v.size(); ++i) {
std::cout << i << ": " << v[i] << "\n";
}size kontra int
size() returnerar size_t — en unsigned-typ. Om den blandas med en signed int-räknare uppstår kompilatorvarningar och subtila fel. Använd size_t eller C++20 std::ssize.
Intervallbaserad for
Den renaste formen när index inte behövs. Välj rätt referenskvalificerare.
for (const auto& x : v) std::cout << x << " "; // read only
for (auto& x : v) x *= 2; // modify in placeIteratorer
En iterator är en generaliserad pekare. v.begin() pekar på det första elementet och v.end() på positionen precis efter det sista.
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}const_iterator
Använd cbegin() och cend() när elementen inte behöver ändras — iteratortypen är const_iterator.
Baklängesiteratorer
rbegin() och rend() itererar från slutet till början. Dereferering ger samma element men i omvänd ordning.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}Iteratoraritmetik
Vektoriteratorer stöder random access: heltal kan adderas och subtraheras, och iteratorer kan jämföras med <.
auto it = v.begin();
it += 3; // skip 3 elements
std::cout << *it;Algoritmer använder iteratorer
STL-algoritmer tar emot iteratorpar. Skicka v.begin(), v.end() till 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 blir ogiltiga
Om element läggs till i en vektor kan den omallokeras. Alla iteratorer, pekare och referenser till vektorn blir ogiltiga efter en operation som ändrar kapaciteten.
Fallgrop: ändra under iterering
Anropa aldrig push_back eller erase i en intervallbaserad for-loop över samma vektor. Skapa en ny vektor eller samla index och agera på dem efteråt.
Snabbkontroll
Vilken itereringsform gör sin iterator ogiltig om push_back utlöser en omallokering?
Sammanfattning
Välj intervallbaserad for när index inte behövs, indexbaserad när det behövs och iteratorbaserad när ni arbetar med algoritmer. Omallokering gör iteratorer ogiltiga — anropa aldrig push_back under iterering.
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Iterera över vektorer: index, range-for och iteratorer” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”Iterera över vektorer: index, range-for och iteratorer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Iterera över vektorer: index, range-for och iteratorer”?
Iterera över en vektor med indexåtkomst, range-for och explicita iteratorer Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C++ Academy?
Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Iterera över vektorer: index, range-for och iteratorer”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C++ Academy-lektionen?
Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Grunderna i std::vector: push_back, size, capacity
- Iterera över vektorer: index, range-for och iteratorer
- Ändra vektorer: insert, erase, clear
- Vector jämfört med std::array och C-array