Namespaces
Variants

std::ranges::views::counted

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
Definido en el encabezado <ranges>
inline constexpr /* unspecified */ counted = /* unspecified */;
(desde C++20)
Firma de llamada
template< class Iterator, class DifferenceType >
    requires /* see below */
constexpr /*span-or-subrange*/ counted( Iterator&& it, DifferenceType&& count );
(desde C++20)

Una vista countada presenta una vista de los elementos del rango contado [i, n) para algún iterador i y un entero no negativo n.

Un rango contado [i, n) son los n elementos que comienzan con el elemento al que apunta i y hasta, sin incluir, el elemento, si lo hay, al que apunta el resultado de n aplicaciones de ++i.

Si n == 0, el rango contado es válido y está vacío. De lo contrario, el rango contado solo es válido si n es positivo, i es desreferenciable y [++i, --n) es un rango contado válido.

Formalmente, si it y count son expresiones, T es std::decay_t<decltype((it))>, y D es std::iter_difference_t<T>, entonces

si T modela input_or_output_iterator y decltype((count)) modela std::convertible_to<D>,
De lo contrario, views::counted(it, count) está mal formado.

Objetos punto de personalización

El nombre views::counted denota un objeto punto de personalización, que es un objeto función const de un tipo de clase literal semirregular. Consulte CustomizationPointObject para más detalles.

Notas

views::counted no verifica si el rango es lo suficientemente largo para proporcionar todos los count elementos: use views::take si esa verificación es necesaria.

Ejemplo

#include <iostream>
#include <ranges>

int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';

    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

Salida:

1 2 3
2 3 4

Informes de defectos

Los siguientes informes de defectos que cambian el comportamiento se aplicaron retroactivamente a los estándares C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2393R1 C++20 la conversión implícita de un tipo de clase entero a std::size_t podría ser inválida hecho explícito

Véase también

una vista que consta de los primeros N elementos de otra vista
(plantilla de clase) (objeto adaptador de rango)
combina un par iterador-centinela en una vista
(plantilla de clase)
adaptador de iterador que rastrea la distancia hasta el final del rango
(plantilla de clase)
devuelve el número de elementos que cumplen criterios específicos
(objeto función de algoritmo)