std::ranges::views::stride, std::ranges::stride_view
| Definido en el encabezado <ranges>
|
||
template< ranges::input_range V >
requires ranges::view<V>
class stride_view
: public ranges::view_interface<stride_view<V>>
|
(1) | (desde C++23) |
namespace views {
inline constexpr /* unspecified */ stride = /* unspecified */;
}
|
(2) | (desde C++23) |
| Signatura 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 /*range adaptor closure*/ 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 sobre n elementos a la vez. Esto significa que cada m-ésimo elemento de la vista producida es el (n * i)-ésimo 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), siS >= n; de lo contrario,1, siS > 0; de lo contrario,0, y la vista resultante está vacía.
views::stride denota un RangeAdaptorObject. Dadas las subexpresiones e y n, la expresión views::stride(e, n) es equivalente en expresión a stride_view(e, n).n debe ser mayor que 0, de lo contrario el comportamiento no está definido.stride_view siempre modela input_range, y modela forward_range, bidirectional_range, random_access_range, y/o sized_range si el tipo de view adaptado V modela el concepto correspondiente.
stride_view<V> modela common_range siempre que la vista subyacente V lo haga.
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 ranges::view_interface | |
| devuelve si la vista derivada está vacía, 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, 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, si satisface forward_range (función miembro pública de std::ranges::view_interface<D>)
| |
| devuelve el último elemento en la vista derivada, solo si satisface bidirectional_range y common_range (función miembro pública de std::ranges::view_interface<D>)
| |
devuelve el nésimo elemento en la vista derivada, 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) |