命名空间
变体
操作

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

来自 cppreference.com
 
 
范围库
范围适配器
 
 

内容

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*/();
(自 C++23 起)
(仅说明*)

如果使用默认模板参数调用,则递归生成 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)
    • 的乘积 static_cast<difference_type>(ranges::size(std::get<N>(parent_->bases_)))/*scaled-size*/(N + 1) 如果 N ≤ sizeof...(Vs),否则
    • 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 - 一个迭代器元组,用于查找到它的距离