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
(注:原文のテキストコンテンツが存在しないため、翻訳対象となるテキストはありません。HTML構造はそのまま保持されています。)
目次 |
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
)
を以下とする:
- 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
で表現できない場合、動作は未定義です。
以下の関数で使用される:
-
operator-( const /*iterator*/ & , const /*iterator*/ & ) -
operator-( const /*iterator*/ & , std:: default_sentinel_t )
パラメータ
| t | - | 距離を求める対象のイテレータのタプル |