std::ranges:: sized_range, std::ranges:: disable_sized_range
|
Definido en el encabezado
<ranges>
|
||
| (1) | ||
|
template
<
class
T
>
concept sized_range
=
ranges::
range
<
T
>
&&
|
(desde C++20)
(hasta C++26) |
|
|
template
<
class
T
>
concept sized_range
=
ranges
::
approximately_sized_range
<
T
>
&&
|
(desde C++26) | |
|
template
<
class
>
constexpr bool disable_sized_range = false ; |
(2) | (desde C++20) |
sized_range
especifica los requisitos de un tipo
range
(hasta C++26)
approximately_sized_range
(desde C++26)
que conoce su tamaño en tiempo constante con la función
size
.
disable_sized_range
existe para permitir el uso de tipos de rango que proporcionan una función
size
(ya sea como miembro o como no miembro) pero que de hecho no modelan
sized_range
. Los usuarios pueden especializar
disable_sized_range
para tipos definidos por el programa sin calificación cv. Dichas especializaciones deben ser utilizables en
expresiones constantes
y tener tipo
const
bool
.
Contenidos |
Requisitos semánticos
T
modela
sized_range
solo si
- ranges:: size ( t )
-
- tiene complejidad de tiempo amortizada constante,
- no altera el valor de t de manera observable para expresiones que preservan la igualdad , y
- es igual a ranges:: distance ( ranges:: begin ( t ) , ranges:: end ( t ) ) , y
-
si
ranges::
iterator_t
<
T
>
modela
forward_iterator, ranges:: size ( t ) está bien definido independientemente de la evaluación de ranges:: begin ( t ) (en otras palabras, un rango sized de una sola pasada puede soportar una llamada a size solo antes de la primera llamada a begin, pero un rango forward debe soportar size en todo momento).
Notas
disable_sized_range
no puede utilizarse para excluir un rango cuyos iterador y centinela satisfacen
sized_sentinel_for
;
std::disable_sized_sentinel_for
debe utilizarse en su lugar.
disable_sized_range
no puede especializarse para tipos de array o tipos de referencia.
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) | ranges::approximately_sized_range y ranges::reserve_hint |
Ejemplo
#include <forward_list> #include <list> #include <ranges> static_assert ( std::ranges::sized_range<std::list<int>> and not std::ranges::sized_range<std::forward_list<int>> ); int main() {}
Véase también
|
(C++20)
|
especifica un rango cuyo tipo de iterador satisface
random_access_iterator
(concepto) |
|
(C++20)
|
especifica un rango cuyo tipo de iterador satisface
contiguous_iterator
(concepto) |