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
| |
(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>();
}
}
用于如下非静态成员函数:
ranges::cartesian_product_view::operator+
std::ranges::cartesian_product_view::iterator::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;
用于如下非静态成员函数:
ranges::cartesian_product_view::operator-
std::ranges::cartesian_product_view::iterator::distance_from
| |
(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*/为/*scaled-distance*/(N)取遍所有整数0 ≤ N ≤ sizeof...(Vs)的和。
返回:/*scaled-sum*/。
若 /*scaled-sum*/ 不能以 difference_type 表示则行为未定义。
用于如下的函数:
operator-(const /*iterator*/&, const /*iterator*/&)operator-(const /*iterator*/&, std::default_sentinel_t)
参数
| t | - | 用于计算距离的迭代器元组 |