Iterator-Kategorien: input, forward, bidirectional, random
Unterscheiden Sie die Iterator-Kategorien und wählen Sie passende Algorithmen aus.
Iterator-Kategorien: input, forward, bidirectional, random ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Iterator?
Ein Iterator ist ein verallgemeinerter Zeiger. Algorithmen arbeiten über Iteratoren und sind dadurch vom zugrunde liegenden Container entkoppelt.
Fünf Iterator-Kategorien
Iteratoren werden nach ihren Fähigkeiten klassifiziert:
- Input – schreibgeschützt, ein Durchlauf
- Output – nur zum Schreiben, ein Durchlauf
- Forward – Lesen und Schreiben, mehrere Durchläufe
- Bidirectional – kann vorwärts und rückwärts bewegt werden
- Random Access – kann um einen ganzzahligen Versatz springen
Input-Iteratoren
Einmal lesen, weiterbewegen, wiederholen. Ein Zurückkehren ist nicht möglich. Beispiel: std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}Output-Iteratoren
Nur zum Schreiben. Beispiele: std::ostream_iterator und std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);Forward-Iteratoren
Wie Input-Iteratoren, aber für mehrere Durchläufe geeignet – Sie können ab derselben Position erneut iterieren. Beispiel: std::forward_list.
Bidirektionale Iteratoren
Forward-Iteratoren mit zusätzlichem --. Beispiele: std::list, std::map, std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last elementRandom-Access-Iteratoren
Bidirektionale Iteratoren mit Sprüngen: it + n, it - n, it[k], it1 - it2. Beispiele: std::vector, std::deque, rohe Arrays.
Anforderungen von Algorithmen
Jeder Algorithmus gibt die mindestens benötigte Iterator-Kategorie vor. std::sort erfordert Random Access, während std::find nur Input benötigt.
Iterator-Traits
std::iterator_traits<Iter> stellt den Werttyp, die Kategorie und weitere Eigenschaften des Iterators zur Compilezeit bereit.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance und std::distance
Bewegen Sie einen Iterator oder messen Sie eine Distanz auf generische Weise. Die Funktionen verwenden die Kategorie für die effizienteste Implementierung.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);Benutzerdefinierte Iteratoren
Definieren Sie für einen eigenen Iterator die erforderlichen Typaliase und Operationen für die Zielkategorie – operator*, operator++, operator== usw.
Iterator-Konzepte in C++20
C++20 hat formale Konzepte wie std::input_iterator, std::forward_iterator und std::random_access_iterator eingeführt. Sie ersetzen das ältere, auf Tags basierende System.
Schnelltest
Welche Iterator-Kategorie unterstützt den Ausdruck it + n in konstanter Zeit?
Zusammenfassung
Iteratoren werden nach ihren Fähigkeiten kategorisiert – Input, Output, Forward, Bidirectional und Random Access. Algorithmen erfordern eine Mindestkategorie. Vector-Iteratoren bieten Random Access, während List- und Map-Iteratoren bidirektional sind.
Häufig gestellte Fragen
Ist die Lektion „Iterator-Kategorien: input, forward, bidirectional, random“ kostenlos?
Ja — der vollständige Text von „Iterator-Kategorien: input, forward, bidirectional, random“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Iterator-Kategorien: input, forward, bidirectional, random“?
Unterscheiden Sie die Iterator-Kategorien und wählen Sie passende Algorithmen aus. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Iterator-Kategorien: input, forward, bidirectional, random“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Iterator-Kategorien: input, forward, bidirectional, random
- Häufige Iterator-Muster: begin, end, advance
- Einführung in die C++20-Ranges-Bibliothek
- Range-Adaptoren: views::filter, views::transform, views::take