Namespaces
Variants

std::ranges::views:: counted

From cppreference.net
Ranges library
Range adaptors
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 contada presenta una view de los elementos del rango contado [ i , n ) para algún iterador i y entero no negativo n .

Un rango contado [ i , n ) son los n elementos que comienzan con el elemento apuntado por i y hasta pero sin incluir el elemento, si existe, apuntado por el resultado de n aplicaciones de ++ i .

Si n == 0 , el rango contado es válido y 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.

Contenidos

Objetos de punto de personalización

El nombre views::counted denota un objeto de punto de personalización , que es un objeto función constante de un tipo de clase literal semiregular . 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 modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2393R1 C++20 la conversión implícita desde un tipo integer-class a std:: size_t podría ser inválida hecha explícita

Véase también

una view que consiste en los primeros N elementos de otra view
(plantilla de clase) (objeto adaptador de rango)
combina un par iterador-sentinel en una view
(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)