Namespaces
Variants

std::ranges::cartesian_product_view<First, Vs...>:: size

From cppreference.net
Ranges library
Range adaptors
constexpr /* ver descripción */ size ( )
requires /*cartesian-product-is-sized*/ < First, Vs... > ;
(1) (desde C++23)
constexpr /* ver descripción */ size ( ) const
requires /*cartesian-product-is-sized*/ < const First, const Vs... > ;
(2) (desde C++23)

Devuelve el número de elementos. El tipo de retorno es un tipo /*unsigned-integer-like*/ definido por la implementación U .

Sea bases_ la tupla subyacente de vistas, y prod el producto de los tamaños de todos los rangos en bases_ .

1,2) Devuelve prod . El comportamiento es indefinido si prod no puede ser representado por el tipo de retorno U .

Equivalente a:

return [&]<std::size_t... Is>(std::index_sequence<Is...>)
{
    auto prod = static_cast<U>(1);
    prod = (static_cast<U>(ranges::size(std::get<Is>(bases_))) * ...);
    return prod;
}
(std::make_index_sequence<1U + sizeof...(Vs)>{});

Contenidos

Parámetros

(ninguno)

Valor de retorno

El número de elementos, es decir, el producto de los tamaños de todos los rangos subyacentes.

Notas

El tipo de retorno es el tipo más pequeño /*unsigned-integer-like*/ que sea suficientemente amplio para almacenar el producto de los tamaños máximos de todos los rangos subyacentes, si existe tal tipo.

Ejemplo

#include <ranges>
int main()
{
    constexpr static auto w = {1};
    constexpr static auto x = {2, 3};
    constexpr static auto y = {4, 5, 6};
    constexpr static auto z = {7, 8, 9, 10, 11, 12, 13};
    constexpr auto v = std::ranges::cartesian_product_view(w, x, y, z);
    static_assert(v.size() == w.size() * x.size() * y.size() * z.size() and v.size() == 42);
}

Véase también

devuelve un entero igual al tamaño de un rango
(objeto punto de personalización)
devuelve un entero con signo igual al tamaño de un rango
(objeto punto de personalización)