0Pricing
C++ Academy · Lektion

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 element

Random-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

  1. Iterator-Kategorien: input, forward, bidirectional, random
  2. Häufige Iterator-Muster: begin, end, advance
  3. Einführung in die C++20-Ranges-Bibliothek
  4. Range-Adaptoren: views::filter, views::transform, views::take
← Zurück zu C++ Academy