Bonjour encore. La traduction du matériel suivant a été préparée spécialement pour les étudiants du cours
"Développeur C ++" , dont les cours commenceront le 27 juin.

La bibliothèque Ranges a été adoptée en C ++ 20 lors d'une réunion du comité standard à San Diego en novembre dernier. La bibliothèque fournit des composants pour le traitement des plages de valeurs conçues pour simplifier notre code. Malheureusement, la bibliothèque Ranges n'est pas très bien documentée, ce qui la rend plus difficile à comprendre pour ceux qui souhaitent la maîtriser. Ce message est destiné à fournir des exemples de code écrit en utilisant et sans plages.
L'implémentation de la bibliothèque Ranges d'Eric Niebler est disponible
ici . Il fonctionne avec Clang 3.6.2 ou version ultérieure, gcc 5.2 ou version ultérieure et VC ++ 15.9 ou version ultérieure. Les exemples de code ci-dessous ont été écrits et testés avec les dernières versions des compilateurs. Il convient de noter que ces exemples sont des implémentations typiques et ne sont pas nécessairement les seules solutions que vous pouvez trouver.
Bien que l'espace de noms standard pour la bibliothèque Ranges soit
std::ranges
, dans cette implémentation de bibliothèque actuelle, il s'agit de
ranges::v3
.
Les alias d'espace de noms suivants sont utilisés dans les exemples ci-dessous:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
Aussi, pour simplifier, nous ferons référence aux objets, fonctions et lambdas suivants:
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 : Je voudrais remercier Eric Nibler et tous les autres qui ont commenté ci-dessous, avec des suggestions pour ces exemples de code. J'en ai mis à jour quelques-uns en fonction de leurs critiques.Imprimez tous les éléments de la gamme:
Imprimez tous les éléments de la gamme dans l'ordre inverse:
N'imprimez que les éléments pairs de la plage, mais dans l'ordre inverse:
Ignorez les deux premiers éléments de la gamme et imprimez uniquement les éléments pairs parmi les trois suivants:
Imprimer les nombres de 101 à 200:
Imprimez tous les chiffres romains de 101 à 200. Pour convertir un nombre en nombre romain correspondant, utilisez la fonction
to_roman()
illustrée ci-dessus.
Imprimez les chiffres romains des trois derniers nombres divisibles par 7 dans la plage [101, 200], dans l'ordre inverse.
Créez une plage de chaînes contenant les chiffres romains des trois derniers nombres qui sont des multiples de 7 dans la plage [101, 200], dans l'ordre inverse.
Modifiez la plage non triée afin qu'elle ne conserve que des valeurs uniques, mais dans l'ordre inverse.
Supprimez les deux plus petites et les deux plus grandes valeurs de la plage et laissez le reste ordonné dans la deuxième plage.
Combinez toutes les lignes d'une plage donnée en une seule valeur.
Comptez le nombre de mots (séparés par un espace) dans le texte.
L'article vous a-t-il été utile? Écrivez dans les commentaires.