Einführung in die C++20-Ranges-Bibliothek
Verwenden Sie die std::ranges-Algorithmen, die Bereiche statt Iteratorpaaren akzeptieren.
Einführung in die C++20-Ranges-Bibliothek ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Warum Ranges?
Das traditionelle STL verwendet Iteratorpaare (v.begin(), v.end()). C++20-Ranges verwenden einen einzelnen Range-Wert und ermöglichen Komposition.
Ranges einbinden
Binden Sie <ranges> ein. Der Namensraum std::ranges ist für Algorithmen und std::views für verzögerte Views vorgesehen.
#include <ranges>
#include <algorithm>Range-Algorithmen
Jeder Standardalgorithmus besitzt ein Ranges-Gegenstück, das einen Range statt zweier Iteratoren entgegennimmt.
std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v); // sort the whole range
auto it = std::ranges::find(v, 4);Projektionsfunktionen
Range-Algorithmen akzeptieren eine optionale Projektion – eine Funktion, die vor dem Vergleich auf jedes Element angewendet wird. Dadurch müssen Sie keine benutzerdefinierten Komparatoren schreiben.
struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparisonWas ist ein Range?
Ein Range ist alles, was begin() und end() unterstützt. Dazu gehören Container, Arrays und in C++20 jeder benutzerdefinierte Typ, der ein Sentinel bereitstellt.
Sentinels
C++20 verallgemeinert end() zu einem Sentinel – er muss nicht denselben Typ wie der Iterator haben. Das ist für Eingabestreams und unendliche Ranges nützlich.
Views: Verzögerte Range-Pipelines
Eine View ist ein nicht besitzender Range, der Elemente bei Bedarf erzeugt. Kombinieren Sie Views mit dem Pipe-Operator |.
auto squares = v
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });
for (int x : squares) std::cout << x << " ";Verzögerte Auswertung
Views reservieren keinen Speicher und werden erst bei der Iteration ausgeführt. filter | transform | take(5) erzeugt nur die ersten fünf transformierten Werte – und nichts darüber hinaus.
Borrowed Ranges und Lebensdauer
Views leihen sich ihren Quell-Range aus. Wenn die Quelle zerstört wird, hängt die View ins Leere. Seien Sie bei Views über temporären Objekten vorsichtig – C++20 hat jedoch Schutzmechanismen eingeführt.
Eifrig vs. verzögert
Algorithmen erzeugen Ergebnisse eifrig (sie berechnen sie sofort). Views sind verzögert (sie berechnen Werte während der Iteration). Entscheiden Sie anhand dessen, ob Sie ein materialisiertes Ergebnis benötigen.
Performance
Verzögerte Pipelines vermeiden Zwischencontainer. Der Compiler optimiert Pipelines häufig so, als wären sie eine einzige Schleife. Überprüfen Sie dies mit godbolt.
Migrationspfad
Wenn Sie C++20 nicht verwenden können, stellen Bibliotheken wie Eric Niebler s range-v3 dasselbe Modell in C++14/17 bereit. Es lohnt sich, dieses Modell bereits heute zu lernen, um die Migration zu erleichtern.
Schnelltest
Was ist der wichtigste Vorteil von C++20-Ranges gegenüber dem STL-Stil mit Iteratorpaaren?
Zusammenfassung
C++20-Ranges modernisieren STL-Algorithmen: Übergeben Sie einen einzelnen Range, verwenden Sie Projektionen und erstellen Sie mit Views verzögerte Pipelines. Der Pipe-Operator kombiniert Filter, Transformationen und Begrenzungen zu klarem, deklarativem Code.
Lerne C++ mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „Einführung in die C++20-Ranges-Bibliothek“ kostenlos?
Ja — der vollständige Text von „Einführung in die C++20-Ranges-Bibliothek“ 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 „Einführung in die C++20-Ranges-Bibliothek“?
Verwenden Sie die std::ranges-Algorithmen, die Bereiche statt Iteratorpaaren akzeptieren. 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 3 von 4.
Wie lange dauert die Lektion „Einführung in die C++20-Ranges-Bibliothek“?
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