Namespaces
Variants

std::ranges::views::stride, std::ranges::stride_view

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
 
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
1) 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.
Sea 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.
2) El nombre 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).
El 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)
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 >> =

ranges:: enable_borrowed_range < 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

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)
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)