名稱空間
變體
操作

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
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 

目錄

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)
    • 如果 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 - 用於查詢距離的迭代器元組