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

目录

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

template < std:: size_t N = sizeof... ( Vs ) >
constexpr void /*next*/ ( ) ;
(C++23 起)
( 仅用于说明* )

若以默认模板参数调用,则递归生成 cartesian_product_view 中的下一个元素(迭代器的元组)。

current_ 表示底层的迭代器元组。等价于:

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>();
    }
}

用于以下非静态成员函数:

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

template < std:: size_t N = sizeof... ( Vs ) >
constexpr void /*prev*/ ( ) ;
(since C++23)
( exposition only* )

若使用默认模板参数调用,则递归生成 cartesian_product_view 中的前一个元素(迭代器元组)。

current_ 表示底层的迭代器元组。等价于:

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;

用于以下非静态成员函数:

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

template < class Tuple >

constexpr difference_type

/*distance-from*/ ( const Tuple & t ) const ;
(C++23 起)
( 仅用于说明* )

返回两个 迭代器 之间的“距离”(即“步进”次数)。

令:

  • parent_ 为指向 cartesian_product_view 的底层指针
  • /*scaled-size*/ ( N ) 为:
    • N ≤ sizeof... ( Vs ) ,则为 static_cast < difference_type > ( ranges:: size ( std :: get < N > ( parent_ - > bases_ ) ) ) /*scaled-size*/ ( N + 1 ) 的乘积,否则
    • static_cast < difference_type > ( 1 ) ;
  • /*scaled-distance*/ ( N ) static_cast < difference_type > ( std :: get < N > ( current_ ) - std :: get < N > ( t ) ) /*scaled-size*/ ( N + 1 ) ; 的乘积
  • /*scaled-sum*/ 为对所有整数 0 ≤ N ≤ sizeof... ( Vs ) /*scaled-distance*/ ( N ) 求和

返回值: /*scaled-sum*/

/*scaled-sum*/ 无法被 difference_type 表示,则行为未定义。

用于以下函数:

参数

t - 要计算距离的迭代器元组