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
{get-view
<N - 1>());it_
.template emplace<N - 1>(get-end
<N - 1>());advance-bwd
<N - 1>(prev_size, steps - offset);
}.
参数
offset | - | 当前(全局)位置相对于 it_ 当前所指向的范围起始位置的偏移量 |
steps | - | 要向后移动的步数 |