Häufige Iterator-Muster: begin, end, advance
Verwenden Sie std::begin, std::end, std::advance und umgekehrte Iteratoren effektiv.
Häufige Iterator-Muster: begin, end, advance ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
begin() und end()
Jeder Standardcontainer stellt begin() (erstes Element) und end() (Position hinter dem letzten Element) bereit. Der halboffene Bereich [begin, end) ist die übliche Methode zum Iterieren.
std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}std::begin und std::end
Freie Funktionen aus <iterator>, die mit jedem Container funktionieren – einschließlich C-Arrays.
int arr[] = {1, 2, 3, 4};
for (auto it = std::begin(arr); it != std::end(arr); ++it) {
std::cout << *it << " ";
}cbegin und cend
Die c-Varianten geben einen const_iterator zurück. Verwenden Sie sie, wenn Sie nichts ändern müssen und der Compiler dies erzwingen soll.
rbegin und rend
Rückwärtsiteratoren. rbegin() zeigt auf das letzte Element, rend() auf die Position vor dem ersten.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}std::next und std::prev
Geben einen um einen Versatz verschobenen Iterator zurück, ohne das Original zu verändern.
auto it = v.begin();
auto next3 = std::next(it, 3); // it + 3
auto prev1 = std::prev(it); // it - 1std::advance
Verändert einen Iterator direkt um eine bestimmte Distanz. Wählt anhand der Kategorie die beste Implementierung aus.
auto it = v.begin();
std::advance(it, 5); // moves it forward by 5std::distance
Misst die Anzahl der Schritte zwischen zwei Iteratoren. O(1) bei Random Access, andernfalls O(n).
auto d = std::distance(v.begin(), it); // index of itEinfügeiteratoren
Adapter, die eine Zuweisung in eine Einfügeoperation umwandeln:
std::back_inserter– push_backstd::front_inserter– push_frontstd::inserter– an einer Position einfügen
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));Stream-Iteratoren
Verwenden Sie Streams wie Bereiche mit std::istream_iterator und std::ostream_iterator.
// Read all ints from cin, print to cout
std::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>{},
std::ostream_iterator<int>(std::cout, " ")
);Beim Iterieren löschen
erase gibt den nächsten gültigen Iterator zurück. Speichern und verwenden Sie ihn erneut.
for (auto it = v.begin(); it != v.end(); ) {
if (*it < 0) it = v.erase(it);
else ++it;
}Iterator-Invalidierung
Das Ändern eines Containers kann seine Iteratoren ungültig machen. Bei Vektoren werden Iteratoren durch eine Größenänderung ungültig; bei Listen bleiben sie stabil, außer bei den gelöschten Elementen.
Schnelltest
Welche Funktion gibt einen Iterator zurück, der auf die Position hinter dem letzten Element eines Containers zeigt?
Zusammenfassung
Verwenden Sie begin()/end() für die Vorwärtsiteration und rbegin()/rend() für die Rückwärtsiteration. std::next, std::prev, std::advance und std::distance funktionieren generisch. Einfügeiteratoren wandeln Zuweisungen in Einfügeoperationen um.
Häufig gestellte Fragen
Ist die Lektion „Häufige Iterator-Muster: begin, end, advance“ kostenlos?
Ja — der vollständige Text von „Häufige Iterator-Muster: begin, end, advance“ 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 „Häufige Iterator-Muster: begin, end, advance“?
Verwenden Sie std::begin, std::end, std::advance und umgekehrte Iteratoren effektiv. 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 2 von 4.
Wie lange dauert die Lektion „Häufige Iterator-Muster: begin, end, advance“?
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