名前空間
変種
操作

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
 
 
Rangesライブラリ
Rangeアダプタ
 
 

目次

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から)
(説明用*)

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 で表現できない場合、動作は未定義です。

以下の関数で使用されます

パラメータ

t - 距離を求めるためのイテレータのタプル
English 日本語 中文(简体) 中文(繁體)