Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 /* 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
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 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.
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-expresión a stride_view ( e, n ) .
El 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)
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 >> =

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)