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.com
< cpp | ranges | cartesian product view | iterator
目次 |
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>(); } }
以下の非静的メンバ関数で使用されます
- ranges::cartesian_product_view::
operator+
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;
以下の非静的メンバ関数で使用されます
- ranges::cartesian_product_view::
operator-
std::ranges::cartesian_product_view::iterator::distance_from
| template< class Tuple > constexpr difference_type |
(C++23から) (説明用*) |
|
2つのイテレータ間の「距離」(すなわち、「ホップ」の数)を返します。
以下とする:
-
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 で表現できない場合、動作は未定義です。
以下の関数で使用されます
-
operator-(const /*iterator*/&, const /*iterator*/&) -
operator-(const /*iterator*/&, std::default_sentinel_t)
パラメータ
| t | - | 距離を求めるためのイテレータのタプル |