Hallo nochmal. Die Übersetzung des folgenden Materials wurde speziell für Studenten des Kurses
"C ++ Developer" erstellt , dessen Unterricht am 27. Juni beginnt.

Die Ranges-Bibliothek wurde im November letzten Jahres auf einer Sitzung des Standardausschusses in San Diego in C ++ 20 übernommen. Die Bibliothek enthält Komponenten für die Verarbeitung von Wertebereichen, die unseren Code vereinfachen sollen. Leider ist die Ranges-Bibliothek nicht sehr gut dokumentiert, was es für diejenigen, die sie beherrschen möchten, schwieriger macht, sie zu verstehen. Dieser Beitrag soll Beispiele für Code enthalten, der mit und ohne Bereiche geschrieben wurde.
Die Implementierung der Ranges-Bibliothek von Eric Niebler finden Sie
hier . Es funktioniert mit Clang 3.6.2 oder höher, gcc 5.2 oder höher und VC ++ 15.9 oder höher. Die folgenden Codebeispiele wurden mit den neuesten Versionen von Compilern geschrieben und getestet. Es ist erwähnenswert, dass diese Beispiele typische Implementierungen sind und nicht unbedingt die einzigen Lösungen sind, die Sie finden können.
Obwohl der Standard-Namespace für die Ranges-Bibliothek
std::ranges
, ist es in dieser aktuellen Bibliotheksimplementierung
ranges::v3
.
Die folgenden Namespace-Aliase werden in den folgenden Beispielen verwendet:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
Zur Vereinfachung werden wir auch auf die folgenden Objekte, Funktionen und Lambdas verweisen:
std::string to_roman(int value) { std::vector<std::pair<int, char const*>> roman { { 1000, "M" },{ 900, "CM" }, { 500, "D" },{ 400, "CD" }, { 100, "C" },{ 90, "XC" }, { 50, "L" },{ 40, "XL" }, { 10, "X" },{ 9, "IX" }, { 5, "V" },{ 4, "IV" }, { 1, "I" } }; std::string result; for (auto const & [d, r]: roman) { while (value >= d) { result += r; value -= d; } } return result; } std::vector<int> v{1,1,2,3,5,8,13,21,34}; auto print_elem = [](auto const e) {std::cout << e << '\n'; }; auto is_even = [](auto const i) {return i % 2 == 0; };
APDATE : Ich möchte Eric Nibler und allen anderen, die unten kommentiert haben, mit Vorschlägen für diese Codebeispiele danken. Ich habe einige basierend auf ihren Bewertungen aktualisiert.Drucken Sie alle Elemente des Bereichs:
Drucken Sie alle Elemente des Bereichs in umgekehrter Reihenfolge:
Drucken Sie nur die geraden Elemente des Bereichs, jedoch in umgekehrter Reihenfolge:
Überspringen Sie die ersten beiden Elemente des Bereichs und drucken Sie nur die folgenden drei aus:
Drucknummern von 101 bis 200:
Drucken Sie alle römischen Ziffern von 101 bis 200 aus. Um eine Zahl in die entsprechende römische Zahl umzuwandeln, verwenden Sie die
to_roman()
gezeigte Funktion
to_roman()
.
Drucken Sie die römischen Ziffern der letzten drei durch 7 teilbaren Zahlen im Bereich [101, 200] in umgekehrter Reihenfolge.
Erstellen Sie eine Reihe von Zeichenfolgen, die die römischen Ziffern der letzten drei Zahlen enthalten, die in umgekehrter Reihenfolge Vielfache von 7 im Bereich [101, 200] sind.
Ändern Sie den unsortierten Bereich so, dass nur eindeutige Werte in umgekehrter Reihenfolge erhalten bleiben.
Löschen Sie die zwei kleinsten und die zwei größten Werte des Bereichs und lassen Sie den Rest im zweiten Bereich.
Kombinieren Sie alle Zeilen in einem bestimmten Bereich zu einem einzigen Wert.
Zählen Sie die Anzahl der Wörter (durch ein Leerzeichen getrennt) im Text.
War der Artikel für Sie hilfreich? Schreiben Sie in die Kommentare.