Introduction à la bibliothèque Ranges de C++20
Utiliser les algorithmes std::ranges qui prennent des plages plutôt que des paires d’itérateurs
Introduction à la bibliothèque Ranges de C++20 est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Pourquoi les plages ?
La STL traditionnelle prend des paires d’itérateurs (v.begin(), v.end()). Les plages C++20 prennent une seule valeur de plage et ajoutent la composabilité.
Inclure les plages
Incluez <ranges>. Les espaces de noms sont std::ranges pour les algorithmes et std::views pour les vues évaluées à la demande.
#include <ranges>
#include <algorithm>Algorithmes sur les plages
Chaque algorithme standard possède un équivalent ranges qui accepte une plage au lieu de deux itérateurs.
std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v); // sort the whole range
auto it = std::ranges::find(v, 4);Fonctions de projection
Les algorithmes sur les plages acceptent une projection facultative — une fonction appliquée à chaque élément avant la comparaison. Cela évite d’écrire des comparateurs personnalisés.
struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparisonQu’est-ce qu’une plage ?
Une plage est tout objet qui prend en charge begin() et end(). Conteneurs, tableaux et, en C++20, tout type personnalisé qui expose une sentinelle.
Sentinelles
C++20 généralise end() en une sentinelle — celle-ci ne doit pas nécessairement être du même type que l’itérateur. Utile pour les flux d’entrée et les plages infinies.
Vues : chaînes de traitement de plages différées
Une vue est une plage qui ne possède pas ses éléments et les produit à la demande. Composez-les avec l’opérateur de barre verticale |.
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 << " ";Évaluation différée
Les vues n’allouent rien et ne s’exécutent pas avant leur parcours. filter | transform | take(5) produit uniquement les 5 premières valeurs transformées — rien de plus.
Plages empruntées et durée de vie
Les vues empruntent leur plage source. Si la source est détruite, la vue devient invalide. Soyez prudent avec les vues portant sur des temporaires — C++20 a toutefois ajouté des protections.
Évaluation immédiate ou différée
Les algorithmes produisent leurs résultats immédiatement (calcul maintenant). Les vues sont différées (calcul lors du parcours). Choisissez selon que vous avez besoin ou non d’un résultat matérialisé.
Performances
Les chaînes de traitement différées évitent les conteneurs intermédiaires. Le compilateur optimise souvent ces chaînes comme s’il s’agissait d’une seule boucle. Inspectez avec godbolt pour vérifier.
Voie de migration
Si vous ne pouvez pas utiliser C++20, des bibliothèques comme range-v3 d’Eric Niebler fournissent le même modèle en C++14/17. Cela vaut la peine de l’apprendre dès aujourd’hui pour faciliter la migration.
Vérification rapide
Quel est le principal avantage des plages C++20 par rapport au style STL à paires d’itérateurs ?
Récapitulatif
Les plages C++20 modernisent les algorithmes de la STL — transmettez une seule plage, utilisez des projections et construisez des chaînes de traitement différées avec des vues. L’opérateur de barre verticale compose les opérations de filtrage, de transformation et de limitation pour produire un code clair et déclaratif.
Questions Fréquemment Posées
La leçon « Introduction à la bibliothèque Ranges de C++20 » est-elle gratuite ?
Oui — le texte complet de « Introduction à la bibliothèque Ranges de C++20 » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Introduction à la bibliothèque Ranges de C++20 » ?
Utiliser les algorithmes std::ranges qui prennent des plages plutôt que des paires d’itérateurs Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Introduction à la bibliothèque Ranges de C++20 » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Catégories d’itérateurs : input, forward, bidirectional, random
- Schémas courants d’itération : begin, end, advance
- Introduction à la bibliothèque Ranges de C++20
- Adaptateurs de plages : views::filter, views::transform, views::take