std::ranges::range
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <ranges>
|
||
template< class T > concept range = requires(T& t) { ranges::begin(t); // conservador de la igualdad para iteradores de avance ranges::end (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.
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)comoranges::end(E)se amortizan en tiempo constante y no alteran el valor deEde una manera observable para las expresiones que preservan la igualdad, y - si el tipo de
ranges::begin(E)modela aforward_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.