C++ Academy · Lección

Concepts estándar habituales: integral y ranges

Use concepts de la biblioteca estándar como integral y ranges::range.

Lección 4 de 414 pasos

Concepts estándar habituales: integral y ranges es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

La biblioteca estándar de conceptos

C++20 introdujo muchos conceptos estándar en <concepts> y <ranges>. Conocerlos evita tener que escribir los suyos.

Conceptos fundamentales del lenguaje

Los conceptos fundamentales:

  • 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>

Conceptos aritméticos

Restrinja los tipos a los numéricos:

  • std::integral — cualquier tipo entero
  • std::signed_integral — entero con signo
  • std::unsigned_integral — entero sin signo
  • std::floating_point — float, double, long double
template <std::floating_point T>
T mean(T a, T b) { return (a + b) / 2; }

Conceptos de comparación

Establezca restricciones para tipos que admitan igualdad y ordenación:

  • std::equality_comparable
  • std::totally_ordered
  • std::three_way_comparable

Conceptos de objetos

Requisitos habituales:

  • std::movable
  • std::copyable
  • std::default_initializable
  • std::semiregular
  • std::regular
template <std::regular T>
class Container { /* full-fledged value type */ };

Conceptos invocables

Para funciones y functors:

  • 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);
}

Conceptos de iteradores

En <iterator>:

  • std::input_iterator
  • std::forward_iterator
  • std::bidirectional_iterator
  • std::random_access_iterator
  • std::contiguous_iterator

Conceptos de ranges (C++20)

De <ranges>:

  • std::ranges::range — tiene begin/end
  • std::ranges::view — range no propietario
  • std::ranges::sized_range — conoce su tamaño en O(1)
  • std::ranges::random_access_range
template <std::ranges::range R>
auto first(R&& r) {
    return *std::ranges::begin(r);
}

Combinar conceptos

Combine conceptos para expresar requisitos precisos.

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));
}

Conceptos personalizados basados en otros

Construya conceptos específicos del dominio a partir de los conceptos estándar.

template <typename T>
concept Number = std::integral<T> || std::floating_point<T>;

Algoritmos basados en conceptos

Los algoritmos de ranges de C++20 tienen muchas restricciones basadas en conceptos. Sus mensajes de error indican directamente qué concepto falló al pasar un tipo inadecuado.

Guía rápida

Utilice los conceptos integrados siempre que sea posible:

  • Números → integral / floating_point
  • Iteración → ranges::range
  • Invocables → invocable / predicate
  • Tipo de valor → regular o semiregular

Comprobación rápida

¿Qué concepto estándar describe un tipo que tiene tanto begin() como end()?

Resumen

La biblioteca estándar ofrece bibliotecas completas de conceptos: aritméticos (integral, floating_point), comparables (equality_comparable), de objetos (movable, regular), invocables, de iteradores y de ranges. Utilícelos como base para sus propias restricciones.

Gratis para empezar

Aprende C++ con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Concepts estándar habituales: integral y ranges» es gratis?

Sí — el texto completo de «Concepts estándar habituales: integral y ranges» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Concepts estándar habituales: integral y ranges»?

Use concepts de la biblioteca estándar como integral y ranges::range. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Concepts estándar habituales: integral y ranges»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué usar concepts frente a SFINAE
  2. Definición de concepts con requires
  3. Uso de concepts en plantillas y auto
  4. Concepts estándar habituales: integral y ranges
← Volver a C++ Academy