std::ranges:: views:: stride, std::ranges:: stride_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
|
(1) | (desde C++23) |
|
namespace
views
{
inline
constexpr
/* no especificado */
stride
=
/* no especificado */
;
|
(2) | (desde C++23) |
|
Firma de llamada
|
||
|
template
<
ranges::
viewable_range
R
>
constexpr ranges:: view auto stride ( R && r, ranges:: range_difference_t < R > n ) ; |
(desde C++23) | |
|
template
<
class
DifferenceType
>
constexpr /*cierre adaptador de rango*/ stride ( DifferenceType && n ) ; |
(desde C++23) | |
|
Plantillas auxiliares
|
||
stride_view
es un adaptador de rango que toma una
view
y un número
n
y produce una vista, que consiste en elementos de la vista original avanzando
n
elementos a la vez. Esto significa que cada
m
th
elemento de la vista producida es el
(n * i)
th
elemento de la vista original, para algún índice no negativo
i
.
Los elementos de la vista original, cuyo "índice" no es un múltiplo de
n
, no están presentes en la vista producida.
S
el tamaño de la vista original. Entonces el tamaño de la vista producida es:
- ( S / n ) + ( S % n ? 1 : 0 ) , si S >= n ; de lo contrario,
- 1 , si S > 0 ; de lo contrario,
- 0 , y la vista resultante está vacía.
n
debe ser mayor que
0
, de lo contrario el comportamiento es indefinido.
stride_view
siempre modela
input_range
, y modela
forward_range
,
bidirectional_range
,
random_access_range
, y/o
sized_range
, si el tipo de vista adaptada
view
V
modela el concepto correspondiente.
stride_view
<
V
>
modela
common_range
siempre que la vista subyacente
V
lo haga.
Contenidos |
Miembros de datos
| Miembro | Descripción |
V
base_
|
la vista subyacente
( objeto miembro solo para exposición* ) |
ranges::
range_difference_t
<
V
>
stride_
|
el objeto de tamaño (el "stride")
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
stride_view
(función miembro pública) |
|
|
(C++23)
|
devuelve el valor de stride almacenado
(función miembro pública) |
|
devuelve una copia de la vista subyacente (adaptada)
(función miembro pública) |
|
|
devuelve un iterador al inicio
(función miembro pública) |
|
|
devuelve un iterador o un centinela al final
(función miembro pública) |
|
devuelve el número de elementos, proporcionado solo si el rango subyacente (adaptado) satisface
sized_range
(función miembro pública) |
|
|
(C++26)
|
devuelve el tamaño aproximado del
approximately_sized_range
resultante
(función miembro pública) |
Heredado de std::ranges::view_interface |
|
devuelve si la vista derivada está vacía, proporcionado solo si satisface
sized_range
o
forward_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
devuelve un iterador constante al inicio del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
(C++23)
|
devuelve un centinela para el iterador constante del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve si la vista derivada no está vacía, proporcionado solo si
ranges::empty
es aplicable a ella
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el primer elemento en la vista derivada, proporcionado si satisface
forward_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el último elemento en la vista derivada, proporcionado solo si satisface
bidirectional_range
y
common_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el elemento
n
ésimo
en la vista derivada, proporcionado solo si satisface
random_access_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
Guías de deducción
Clases anidadas
|
(C++23)
|
el tipo de iterador
( clase plantilla de miembro solo para exposición* ) |
Plantillas auxiliares
|
template
<
class
V
>
constexpr
bool
ranges::
enable_borrowed_range
<
stride_view
<
V
>>
=
|
(desde C++23) | |
Esta especialización de
ranges::enable_borrowed_range
hace que
stride_view
satisfaga
borrowed_range
cuando la vista subyacente la satisface.
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_ranges_stride
|
202207L
|
(C++23) |
std::ranges::stride_view
|
Ejemplo
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> using namespace std::literals; void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ") { for (auto const& x : v) std::cout << x << separator; std::cout << '\n'; } int main() { print(std::views::iota(1, 13) | std::views::stride(3)); print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse); print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3)); print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) | std::views::transform([](char O) -> char { return 0100 | O; }), ""); }
Salida:
1 4 7 10 10 7 4 1 12 9 6 3 password
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 26.7.31 Vista de paso [range.stride]
Véase también
|
(C++23)
|
una
view
cuyo elemento M
ésimo
es una
view
sobre los elementos M
ésimo
a (M + N - 1)
ésimo
de otra
view
(plantilla de clase) (objeto adaptador de rango) |
|
(C++23)
|
un rango de
view
s
que son fragmentos sucesivos no superpuestos de tamaño
N
de los elementos de otra
view
(plantilla de clase) (objeto adaptador de rango) |
una
view
que consiste en tuplas de referencias a elementos adyacentes de la vista adaptada
(plantilla de clase) (objeto adaptador de rango) |
|
una
view
que consiste en los elementos de un
range
que satisfacen un predicado
(plantilla de clase) (objeto adaptador de rango) |