std::ranges::range
De cppreference.com
Definido en el archivo de encabezado <ranges>
|
||
template< class T > concept range = requires(T& t) { |
||
El concepto range
define los requisitos de un tipo que permite la iteración sobre sus elementos proporcionando un iterador y un centinela que denotan los elementos en el rango.
[editar] Requisitos semánticos
Dada una expresión E tal que decltype((E)) es T, T modela a range solo si
- [ranges::begin(E), ranges::end(E)) denota un rango y
- tanto ranges::begin(E) como ranges::end(E) se amortizan en tiempo constante y no alteran el valor de E de una manera observable para las expresiones que preservan la igualdad, y
- si el tipo de ranges::begin(E) modela a
forward_iterator
, ranges::begin(E) es conservador de la igualdad (en otras palabras, los iteradores de avance admiten algoritmos de múltiples pasadas)
Nota: En la definición anterior, las expresiones requeridas ranges::begin(std::forward<T>(t)) y ranges::end(std::forward<T>(t)) no requieren variaciones de expresión implícita.