std::ranges::concat_view<Views...>::iterator<Const>::satisfy, prev, advance-fwd, advance-bwd
來自 cppreference.com
< cpp | ranges | concat view | iterator
以下僅用於說明的成員函式模板簡化了描述。
每個輔助函式模板都有一個非型別模板引數,型別為 std::size_t。
- 如果模板引數的名稱是 N,則模板實參始終是
it_.index()。 - 如果模板引數的名稱是 I,則模板實參可以是
[0,sizeof...(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_ 中包含的底層迭代器。2) 獲取父
concat_view 中的第 I 個檢視。3) 獲取父
concat_view 中第 I 個檢視的起始迭代器。 返回 ranges::begin(
get-view <I>())。4) 獲取父
concat_view 中第 I 個檢視的末尾迭代器或哨兵。 返回 ranges::end(
get-view <I>())。 返回 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_ 的當前(全域性)位置。
std::ranges::concat_view::iterator::prev<N>
template< size_t N > constexpr void /*prev*/(); |
(僅作說明*) | |
將 it_ 移動到前一個(全域性)位置。
std::ranges::concat_view::iterator::advance-fwd<N>
template< size_t N > constexpr void /*advance-fwd*/( difference_type offset, |
(僅作說明*) | |
將當前(全域性)位置向前推進 step 步。
- 如果 N 是 sizeof...(Views) - 1,等價於
get-iter<N>() +=to-underlying-diff-type(steps);。 - 否則,等價於 auto n_size = ranges::distance(
get-view<N>()));
if (offset + steps < n_size)get-iter<N>() +=to-underlying-diff-type(steps);
else
{it_.template emplace<N + 1>(get-begin<N + 1>());advance-fwd<N + 1>(0, offset + steps - n_size);
}。
引數
| offset | - | 當前(全域性)位置相對於 it_ 當前所指範圍起始點的偏移量 |
| steps | - | 向前推進的步數 |
std::ranges::concat_view::iterator::advance-bwd<N>
template< size_t N > constexpr void /*advance-bwd*/( difference_type offset, |
(僅作說明*) | |
將當前(全域性)位置向後推進 steps 步。
- 如果 N 是 0,等價於
get-iter<N>() -=to-underlying-diff-type(steps);。 - 否則,等價於 if (offset >= steps)
get-iter<N>() -=to-underlying-diff-type(steps);
else
{auto prev_size = ranges::distance(get-view<N - 1>());it_.template emplace<N - 1>(get-end<N - 1>());advance-bwd<N - 1>(prev_size, steps - offset);
}。
引數
| offset | - | 當前(全域性)位置相對於 it_ 當前所指範圍起始點的偏移量 |
| steps | - | 向後推進的步數 |