std::ranges::concat_view<Views...>:: iterator <Const>:: satisfy , prev , advance-fwd , advance-bwd
以下仅用于说明的成员函数模板简化了描述。
每个辅助函数模板都有一个类型为 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++标准文档中。
it_
中的底层迭代器。
concat_view
中的第
I
个视图。
concat_view
中第
I
个视图的起始迭代器。
get-view
<
I
>
(
)
)
。
concat_view
中第
I
个视图的尾后迭代器或哨兵。
get-view
<
I
>
(
)
)
。
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 | - | 向后移动的步数 |