C++ Academy · Lektion

Iterator-kategorier: input, forward, bidirectional, random

Skeln mellem iterator-kategorierne, og vælg algoritmer, der passer til dem

Lektion 1 af 414 trin

Iterator-kategorier: input, forward, bidirectional, random er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 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.

Hvad er en iterator?

En iterator er en generaliseret pointer. Algoritmer arbejder gennem iteratorer, så de kobles fra den underliggende container.

Fem iterator-kategorier

Iteratorer klassificeres efter deres egenskaber:

  • Inddata — skrivebeskyttet, ét gennemløb
  • Uddata — kun skrivning, ét gennemløb
  • Fremad — læsning og skrivning, flere gennemløb
  • Tovejs — kan bevæge sig fremad og tilbage
  • Tilfældig adgang — kan springe med en heltalsforskydning

Inddata-iteratorer

Læs én gang, gå videre, gentag. Du kan ikke gå tilbage. Eksempel: std::istream_iterator.

std::istream_iterator<int> in(std::cin), end;
while (in != end) {
    std::cout << *in << " ";
    ++in;
}

Uddata-iteratorer

Skriver kun. Eksempler: std::ostream_iterator og std::back_inserter.

std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);

Fremadrettede iteratorer

Som inddata, men med flere gennemløb — du kan gennemløbe området igen fra samme position. Eksempel: std::forward_list.

Tovejsiteratorer

Fremadrettede iteratorer plus --. Eksempler: std::list, std::map og std::set.

std::list<int> l = {1, 2, 3};
auto it = l.end();
--it;        // OK, points to last element

Iteratorer med tilfældig adgang

Tovejsiteratorer plus spring: it + n, it - n, it[k], it1 - it2. Eksempler: std::vector, std::deque og rå arrays.

Krav til algoritmer

Hver algoritme angiver den mindste iterator-kategori, den har brug for. std::sort kræver tilfældig adgang; std::find kræver kun inddata.

Iterator-egenskaber

std::iterator_traits<Iter> eksponerer iteratorens værditype, kategori og andre egenskaber på kompileringstidspunktet.

using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;

std::advance og std::distance

Flyt en iterator, eller mål en afstand på en generisk måde. De bruger kategorien til den mest effektive implementering.

auto it = v.begin();
std::advance(it, 5);              // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);

Brugerdefinerede iteratorer

Hvis du vil skrive din egen, skal du definere de nødvendige typealiaser og operationer for den kategori, du sigter mod — operator*, operator++, operator== osv.

Iterator-koncepter i C++20

C++20 tilføjede formelle koncepter som std::input_iterator, std::forward_iterator og std::random_access_iterator. De erstatter det ældre mærkebaserede system.

Hurtigt tjek

Hvilken iterator-kategori understøtter udtrykket it + n i konstant tid?

Opsummering

Iteratorer kategoriseres efter egenskaber — inddata, uddata, fremad, tovejs og tilfældig adgang. Algoritmer kræver en bestemt minimumskategori. Vektoriteratorer har tilfældig adgang; iteratorer til lister og maps er tovejsiteratorer.

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 “Iterator-kategorier: input, forward, bidirectional, random” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Iterator-kategorier: input, forward, bidirectional, random”, 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 “Iterator-kategorier: input, forward, bidirectional, random”?

Skeln mellem iterator-kategorierne, og vælg algoritmer, der passer til dem 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 1 af 4.

Hvor lang tid tager lektionen “Iterator-kategorier: input, forward, bidirectional, random”?

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. Iterator-kategorier: input, forward, bidirectional, random
  2. Almindelige iterator-mønstre: begin, end, advance
  3. Introduktion til C++20's ranges-bibliotek
  4. Range-adaptors: views::filter, transform, take
← Tilbage til C++ Academy