命名空间
变体
操作

std::ranges::concat_view<Views...>::iterator<Const>::satisfyprevadvance-fwdadvance-bwd

来自 cppreference.cn
< 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<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 - 向后移动的步数