Namespaces
Variants

std::ranges::subrange<I,S,K>:: subrange

From cppreference.net
Ranges library
Range adaptors
subrange ( ) requires std:: default_initializable < I > = default ;
(1) (desde C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s )
requires ( ! /*StoreSize*/ ) ;
(2) (desde C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s,

/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )

requires ( K == ranges :: subrange_kind :: sized ) ;
(3) (desde C++20)
template < /*different-from*/ < subrange > R >

requires ranges:: borrowed_range < R > &&
/*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r )

requires ( ! /*StoreSize*/ || ranges:: sized_range < R > ) ;
(4) (desde C++20)
template < ranges:: borrowed_range R >

requiere /*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r,
/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )
requiere ( K == ranges :: subrange_kind :: sized )

: subrange { ranges:: begin ( r ) , ranges:: end ( r ) , n } { }
(5) (desde C++20)

Construye un subrange .

Para las definiciones de /*make-unsigned-like-t*/ y /*different-from*/ , consulte make-unsigned-like-t y different-from respectivamente.

Sobrecarga Miembros de datos
begin_ end_ size_
(solo si StoreSize es true )
(1) inicializado por valor inicializado por valor inicializado con 0
(2) inicializado con std :: move ( i ) inicializado con s N/A
(3) inicializado con n
(4) inicializado con std :: move ( ranges:: begin ( r ) ) inicializado con ranges:: end ( r ) inicializado con static_cast < decltype ( size_  ) >
( ranges:: size ( r ) )
(5) inicializado con n
2) Si [ i , s ) no es un rango válido , el comportamiento es indefinido.
3) Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:

Parámetros

i - iterador que denota el inicio del rango
s - centinela que denota el final del rango
r - rango
n - sugerencia de tamaño, debe ser igual al tamaño del rango

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2393R1 C++20 para la sobrecarga ( 4 ) , size_ podría inicializarse con ranges:: size ( r ) , pero no siempre es
convertible implícitamente al tipo correspondiente unsigned-integer-like
se hizo la
conversión explícita