名稱空間
變體
操作

std::ranges::concat_view<Views...>::iterator<Const>::satisfy, prev, advance-fwd, advance-bwd

來自 cppreference.com
< cpp‎ | ranges‎ | concat view‎ | iterator
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 

以下僅用於說明的成員函式模板簡化了描述。

每個輔助函式模板都有一個非型別模板引數,型別為 std::size_t

  • 如果模板引數的名稱是 N,則模板實參始終是 it_ .index()
  • 如果模板引數的名稱是 I,則模板實參可以是 [0sizeof...(Views)) 中的任何 std::size_t 值。

然而,模板實參可能不是編譯時常量,因此 helper <non_const>(/* arguments */) 的實際效果類似於 if (non_const == 0)
    helper <0>(/* arguments */);
else if (non_const == 1)
    helper <1>(/* arguments */);
/* other indices */
else if (non_const == (sizeof...(Views) - 1))
    helper <sizeof...(Views) - 1>(/* arguments */);

目錄

[編輯] 輔助模板

小型輔助模板

template< std::size_t N >
constexpr auto /*get-iter*/();
(1) (僅作說明*)
template< std::size_t I >
constexpr auto /*get-view*/();
(2) (僅作說明*)
template< std::size_t I >
constexpr auto /*get-begin*/();
(3) (僅作說明*)
template< std::size_t I >
constexpr auto /*get-end*/();
(4) (僅作說明*)
template< std::size_t N >
constexpr auto /*to-underlying-diff-type*/( difference_type value );
(5) (僅作說明*)

小型輔助模板簡化了主輔助模板和成員函式的描述。它們不包含在 C++ 標準文件中。

1) 獲取 it_ 中包含的底層迭代器。
返回 std::get<N>(it_ )
2) 獲取父 concat_view 中的第 I 個檢視。
返回 std::get<I>(parent_ ->views_ )
3) 獲取父 concat_view 中第 I 個檢視的起始迭代器。
返回 ranges::begin(get-view <I>())
4) 獲取父 concat_view 中第 I 個檢視的末尾迭代器或哨兵。
返回 ranges::end(get-view <I>())
5)value 轉換為 it_ 中包含的底層迭代器的底層差值型別。
返回 static_cast<std::iter_difference_t<std::variant_alternative_t<N, base-iter >>>(value)

std::ranges::concat_view::iterator::satisfy<N>

template< std::size_t N >
constexpr void /*satisfy*/();
(僅作說明*)

調整 it_ 的當前(全域性)位置。

  • 如果 Nsizeof...(Views) - 1,則不執行任何操作。
  • 否則,等價於 if (get-iter <N>() == get-end <N>())
    {
        it_ .template emplace<N + 1>(get-begin <N + 1>());
        satisfy <N + 1>();
    }

std::ranges::concat_view::iterator::prev<N>

template< size_t N >
constexpr void /*prev*/();
(僅作說明*)

it_ 移動到前一個(全域性)位置。

  • 如果 N0,等價於 --get-iter <0>();
  • 否則,等價於 if (get-iter <N>() == get-begin <N>())
    {
        it_ .template emplace<N - 1>(get-end <N - 1>());
        prev <N - 1>();
    }
    else
        --get-iter <0>();

std::ranges::concat_view::iterator::advance-fwd<N>

template< size_t N >

constexpr void /*advance-fwd*/( difference_type offset,

                                difference_type steps );
(僅作說明*)

將當前(全域性)位置向前推進 step 步。

引數

offset - 當前(全域性)位置相對於 it_ 當前所指範圍起始點的偏移量
steps - 向前推進的步數

std::ranges::concat_view::iterator::advance-bwd<N>

template< size_t N >

constexpr void /*advance-bwd*/( difference_type offset,

                                difference_type steps );
(僅作說明*)

將當前(全域性)位置向後推進 steps 步。

引數

offset - 當前(全域性)位置相對於 it_ 當前所指範圍起始點的偏移量
steps - 向後推進的步數