Concepts standard courants : integral et Ranges
Utiliser des concepts de la bibliothèque standard comme integral et ranges::range
Concepts standard courants : integral et Ranges est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.
La bibliothèque standard de concepts
C++20 a introduit de nombreux concepts standard dans <concepts> et <ranges>. Les connaître vous évite de créer les vôtres.
Concepts fondamentaux du langage
Les concepts fondamentaux :
std::same_as<T, U>std::derived_from<T, U>std::convertible_to<T, U>std::common_with<T, U>std::assignable_from<T, U>
Concepts arithmétiques
Limitez les types aux types numériques :
std::integral— tout type entierstd::signed_integral— entier signéstd::unsigned_integral— entier non signéstd::floating_point— float, double, long double
template <std::floating_point T>
T mean(T a, T b) { return (a + b) / 2; }Concepts de comparaison
Imposez des contraintes aux types pour l’égalité et l’ordre :
std::equality_comparablestd::totally_orderedstd::three_way_comparable
Concepts d’objet
Exigences courantes :
std::movablestd::copyablestd::default_initializablestd::semiregularstd::regular
template <std::regular T>
class Container { /* full-fledged value type */ };Concepts appelables
Pour les fonctions et les foncteurs :
std::invocable<F, Args...>std::regular_invocable<F, Args...>std::predicate<F, Args...>
template <std::invocable<int> F>
void apply_to_42(F&& f) {
std::forward<F>(f)(42);
}Concepts d’itérateur
Dans <iterator> :
std::input_iteratorstd::forward_iteratorstd::bidirectional_iteratorstd::random_access_iteratorstd::contiguous_iterator
Concepts de plage (C++20)
Dans <ranges> :
std::ranges::range— possède begin/endstd::ranges::view— plage sans possessionstd::ranges::sized_range— connaît sa taille en O(1)std::ranges::random_access_range
template <std::ranges::range R>
auto first(R&& r) {
return *std::ranges::begin(r);
}Combinaison de concepts
Mélangez les concepts pour exprimer des exigences précises.
template <std::ranges::random_access_range R>
requires std::integral<std::ranges::range_value_t<R>>
auto sum(const R& r) {
return std::reduce(std::ranges::begin(r), std::ranges::end(r));
}Concepts personnalisés fondés sur les concepts standard
Construisez des concepts propres à votre domaine à partir des concepts standard.
template <typename T>
concept Number = std::integral<T> || std::floating_point<T>;Algorithmes reposant sur des concepts
Les algorithmes de plage de C++20 sont fortement contraints par des concepts. Lorsque vous leur transmettez un type inadapté, leurs messages d’erreur indiquent directement quel concept n’est pas respecté.
Aide-mémoire
Utilisez les concepts intégrés chaque fois que possible :
- Nombres →
integral/floating_point - Itération →
ranges::range - Appelable →
invocable/predicate - Type de valeur →
regularousemiregular
Vérification rapide
Quel concept standard décrit un type qui possède à la fois begin() et end() ?
Récapitulatif
La bibliothèque standard fournit de riches bibliothèques de concepts : arithmétiques (integral, floating_point), comparables (equality_comparable), d’objets (movable, regular), appelables, d’itérateurs et de plages. Utilisez-les comme fondement de vos propres contraintes.
Questions Fréquemment Posées
La leçon « Concepts standard courants : integral et Ranges » est-elle gratuite ?
Oui — le texte complet de « Concepts standard courants : integral et Ranges » 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 « Concepts standard courants : integral et Ranges » ?
Utiliser des concepts de la bibliothèque standard comme integral et ranges::range 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 4 sur 4.
Combien de temps prend la leçon « Concepts standard courants : integral et Ranges » ?
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
- Pourquoi préférer les concepts à SFINAE
- Définir des concepts avec requires
- Utiliser les concepts dans les modèles et avec auto
- Concepts standard courants : integral et Ranges