Namespaces
Variants

std::ranges:: views:: chunk, std::ranges:: chunk_view

From cppreference.net
Ranges library
Range adaptors
std::ranges::chunk_view
Member functions
Classes for input_range s
Deduction guides
outer-iterator
outer-iterator ::value_type
inner-iterator
Definido en el encabezado <ranges>
template < ranges:: view V >

requires ranges:: input_range < V >
class chunk_view

: public ranges:: view_interface < chunk_view < V >>
(1) (desde C++23)
template < ranges:: view V >

requires ranges:: forward_range < V >
class chunk_view < V >

: public ranges:: view_interface < chunk_view < V >>
(2) (desde C++23)
namespace views {

inline constexpr /* no especificado */ chunk = /* no especificado */ ;

}
(3) (desde C++23)
Firma de llamada
template < ranges:: viewable_range R >
constexpr ranges:: view auto chunk ( R && r, ranges:: range_difference_t < R > n ) ;
(desde C++23)
template < class DifferenceType >
constexpr /*adaptador de rango de cierre*/ chunk ( DifferenceType && n ) ;
(desde C++23)
Plantillas auxiliares
template < class I >
constexpr I /*div-ceil*/ ( I num, I denom ) ;
(4) ( solo para exposición* )

chunk_view toma una view y un número n y produce un rango de vistas (los chunks  ) de la vista original, de modo que cada chunk  , excepto quizás el último, tiene el tamaño n . Estos chunks son sub-rangos no superpuestos y sucesivos de los elementos de la vista original, en orden.

Sea s el tamaño de la vista original. Si s no es múltiplo de n , el tamaño de la última vista producida es exactamente s % n (el resto). De lo contrario, el tamaño de cada fragmento , incluido el último, es n .

El tamaño de la vista producida es /*div-ceil*/ ( s ) .

Si n no es mayor que 0 el comportamiento es indefinido.

1) Una implementación que admite la vista subyacente V que modela únicamente input_range .
2) Una especialización parcial que admite la vista subyacente V que modela forward_range o superior. Modela common_range si la vista subyacente V es forward_range , common_range , y ya sea sized_range o no bidirectional_range .
3) El nombre views :: chunk denota un RangeAdaptorObject . Dadas las subexpresiones e y n , la expresión views :: chunk ( e, n ) es equivalente-expresión a chunk_view ( e, n ) .
4) Calcula el valor entero más pequeño que no sea menor que el cociente de dividir num entre denom . Equivalente a:
I r = num / denom;
if (num % denom)
    ++r;
return r;

Contenidos

Miembros de datos

Miembro Descripción
V base_ la vista subyacente
( objeto miembro solo para exposición* )
ranges:: range_difference_t < V > n_ el tamaño del "fragmento"
( objeto miembro solo para exposición* )
Si V modela exactamente input_range ( 1 )
ranges:: range_difference_t < V > remainder_
(condicionalmente presente)
el número de elementos restantes en el "fragmento" actual
( objeto miembro solo para exposición* )
non-propagating-cache < ranges:: iterator_t < V >> current_
(condicionalmente presente)
un objeto que almacena en caché el iterador subyacente actual
( objeto miembro solo para exposición* )

Funciones miembro

construye un chunk_view
(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 n ésimo elemento 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

el tipo de iterador de salida ("por fragmentos") cuando V modela input_range ( 1 )
( clase miembro solo para exposición* )
el tipo de iterador interno ("por elementos") cuando V modela input_range ( 1 )
( clase miembro solo para exposición* )
(C++23)
el tipo de iterador cuando V modela forward_range ( 2 )
( plantilla de clase miembro solo para exposición* )

Plantillas auxiliares

template < class V >

constexpr bool ranges:: enable_borrowed_range < chunk_view < V >> =

ranges:: forward_range < V > && ranges:: enable_borrowed_range < V > ;
(desde C++23)

Esta especialización de ranges::enable_borrowed_range hace que chunk_view satisfaga borrowed_range cuando la vista subyacente V satisface tanto forward_range como borrowed_range .

Notas

Si V modela input_range ( 1 ) , chunk_view tiene un tipo de iterador dedicado: outer_iterator::value_type que es en sí mismo una vista de entrada.

Si V modela forward_range o más fuerte ( 2 ) , chunk_view delega en views::take para su value_type .

Si V modela bidirectional_range o rangos más potentes ( 2 ) , la necesidad de calcular el tamaño del último fragmento correctamente (desde el iterador final iterator ) requiere que el tipo de rango subyacente V sea sized_range .

Macro de prueba de características Valor Estándar Característica
__cpp_lib_ranges_chunk 202202L (C++23) std::ranges::chunk_view

Ejemplo

#include <algorithm>
#include <initializer_list>
#include <iostream>
#include <ranges>
auto print_subrange = [](std::ranges::viewable_range auto&& r)
{
    std::cout << '[';
    for (int pos{}; auto elem : r)
        std::cout << (pos++ ? " " : "") << elem;
    std::cout << "] ";
};
int main()
{
    const auto v = {1, 2, 3, 4, 5, 6};
    for (const unsigned width : std::views::iota(1U, 2U + v.size()))
    {
        auto const chunks = v | std::views::chunk(width);
        std::cout << "chunk(" << width << "): ";
        std::ranges::for_each(chunks, print_subrange);
        std::cout << '\n';
    }
}

Salida:

chunk(1): [1] [2] [3] [4] [5] [6]
chunk(2): [1 2] [3 4] [5 6]
chunk(3): [1 2 3] [4 5 6]
chunk(4): [1 2 3 4] [5 6]
chunk(5): [1 2 3 4 5] [6]
chunk(6): [1 2 3 4 5 6]
chunk(7): [1 2 3 4 5 6]

Referencias

  • Estándar C++23 (ISO/IEC 14882:2024):
  • 26.7.28 Vista de fragmentos [range.chunk]

Véase también

divide la view en subrangos entre cada par de elementos adyacentes para los cuales el predicado dado devuelve false
(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 cuyo M-ésimo elemento es una view sobre los elementos M-ésimo a (M + N - 1)-ésimo de otra view
(plantilla de clase) (objeto adaptador de rango)