0Pricing
C++ Academy · Leçon

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 entier
  • std::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_comparable
  • std::totally_ordered
  • std::three_way_comparable

Concepts d’objet

Exigences courantes :

  • std::movable
  • std::copyable
  • std::default_initializable
  • std::semiregular
  • std::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_iterator
  • std::forward_iterator
  • std::bidirectional_iterator
  • std::random_access_iterator
  • std::contiguous_iterator

Concepts de plage (C++20)

Dans <ranges> :

  • std::ranges::range — possède begin/end
  • std::ranges::view — plage sans possession
  • std::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 → regular ou semiregular

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

  1. Pourquoi préférer les concepts à SFINAE
  2. Définir des concepts avec requires
  3. Utiliser les concepts dans les modèles et avec auto
  4. Concepts standard courants : integral et Ranges
← Retour à C++ Academy