C++ Academy · Lektion

Iterera över vektorer: index, range-for och iteratorer

Iterera över en vektor med indexåtkomst, range-for och explicita iteratorer

Lektion 2 av 413 steg

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 place

Iteratorer

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.

Gratis att börja

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

  1. Grunderna i std::vector: push_back, size, capacity
  2. Iterera över vektorer: index, range-for och iteratorer
  3. Ändra vektorer: insert, erase, clear
  4. Vector jämfört med std::array och C-array
← Tillbaka till C++ Academy