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,那么模板实参可以是 [0sizeof...(Views)) 中的任何 std::size_t 值。

然而模板形参不一定是编译期常量,因此 helper <non_const>(/* 实参 */) 的实际效果类似于 if (non_const == 0)
    helper <0>(/* 实参 */);
else if (non_const == 1)
    helper <1>(/* 实参 */);
/* 其他索引 */
else if (non_const == (sizeof...(Views) - 1))
    helper <sizeof...(Views) - 1>(/* 实参 */);

辅助模板

迷你辅助模板

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<I, base-iter >>>(value)

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

template< 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 );
(仅用于阐述*)

将当前(全局)位置前进 steps 步。

参数

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-要后退的步数