Namespaces
Variants

std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: next , std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: prev , std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: distance_from

From cppreference.net
Ranges library
Range adaptors

Contenidos

std::ranges::cartesian_product_view:: iterator :: next

template < std:: size_t N = sizeof... ( Vs ) >
constexpr void /*next*/ ( ) ;
(desde C++23)
( solo para exposición* )

Si se llama con el parámetro de plantilla por defecto, genera recursivamente el siguiente elemento (la tupla de iteradores) en cartesian_product_view .

Sea current_ la tupla subyacente de iteradores. Equivalente a:

auto& it = std::get<N>(current_);
++it;
if constexpr (N > 0)
{
    if (it == ranges::end(std::get<N>(parent_->bases_)))
    {
        it = ranges::begin(std::get<N>(parent_->bases_));
        next<N - 1>();
    }
}

Se utiliza en las siguientes funciones miembro no estáticas:

std::ranges::cartesian_product_view:: iterator :: prev

template < std:: size_t N = sizeof... ( Vs ) >
constexpr void /*prev*/ ( ) ;
(desde C++23)
( solo para exposición* )

Si se llama con el parámetro de plantilla predeterminado, genera recursivamente el elemento anterior (la tupla de iteradores) en cartesian_product_view .

Sea current_ la tupla subyacente de iteradores. Equivalente a:

auto& it = std::get<N>(current_);
if constexpr (N > 0)
{
    if (it == ranges::begin(std::get<N>(parent_->bases_)))
    {
        it = /*cartesian-common-arg-end*/(std::get<N>(parent_->bases_));
        prev<N - 1>();
    }
}
--it;

Se utiliza en las siguientes funciones miembro no estáticas:

std::ranges::cartesian_product_view:: iterator :: distance_from

template < class Tuple >

constexpr difference_type

/*distance-from*/ ( const Tuple & t ) const ;
(desde C++23)
( solo para exposición* )

Retorna la "distancia" (es decir, el número de "saltos") entre dos iteradores .

Sea:

  • parent_ el puntero subyacente a cartesian_product_view
  • /*scaled-size*/ ( N ) sea:
    • el producto de static_cast < difference_type > ( ranges:: size ( std :: get < N > ( parent_ - > bases_ ) ) ) y /*scaled-size*/ ( N + 1 ) si N ≤ sizeof... ( Vs ) , de lo contrario
    • static_cast < difference_type > ( 1 ) ;
  • /*scaled-distance*/ ( N ) sea el producto de static_cast < difference_type > ( std :: get < N > ( current_ ) - std :: get < N > ( t ) ) y /*scaled-size*/ ( N + 1 ) ;
  • /*scaled-sum*/ sea la suma de /*scaled-distance*/ ( N ) para cada entero 0 ≤ N ≤ sizeof... ( Vs ) .

Retorna: /*scaled-sum*/ .

El comportamiento es indefinido si /*scaled-sum*/ no puede ser representado por difference_type .

Se utiliza en las siguientes funciones:

Parámetros

t - una tupla de iteradores a la cual encontrar la distancia