std::experimental::ranges:: advance
|
namespace
{
constexpr
/* 未指定 */
advance
=
/* 未指定 */
;
|
(ranges TS)
(定制点对象) |
|
|
调用签名
|
||
|
template
<
Iterator I
>
constexpr void advance ( I & i, ranges :: difference_type_t < I > n ) ; |
(1) | |
|
template
<
Iterator I, Sentinel
<
I
>
S
>
constexpr void advance ( I & i, S bound ) ; |
(2) | |
|
template
<
Iterator I, Sentinel
<
I
>
S
>
constexpr ranges :: difference_type_t < I > advance ( I & i, ranges :: difference_type_t < I > n, S bound ) ; |
(3) | |
将迭代器 i 前进 n 次,或直至到达 bound (以先达到者为准)。
I
满足
RandomAccessIterator
概念,则等价于
i
+
=
n
。否则,将
i
递增(若
n
为负则递减)
n
次。若
n
为负且
I
不满足
BidirectionalIterator
概念,则行为未定义。
[
i
,
bound
)
不表示一个有效范围,则行为未定义。
[
i
,
bound
)
应表示一个区间;若
n
==
0
,则
[
i
,
bound
)
或
[
bound
,
i
)
应表示一个区间;若
n
<
0
,则
[
bound
,
i
)
应表示一个区间,
I
与
S
应为相同类型,且
I
必须满足
BidirectionalIterator
概念。否则行为未定义。
目录 |
定制点对象
名称
ranges::advance
表示一个
定制点对象
,它是一个字面量
Semiregular
类类型(为说明方便,记作
AdvanceT
)的
函数对象
。
AdvanceT
的所有实例都是等价的。因此,
ranges::advance
可以被自由复制,其副本可以互换使用。
给定一组类型
Args...
,若
std::
declval
<
Args
>
(
)
...
满足上述对
ranges::advance
参数的要求,则
AdvanceT
将满足
ranges
::
Invocable
<
const
AdvanceT, Args...
>
。否则,
AdvanceT
的函数调用运算符均不参与重载决议。
在每个定义了
ranges::advance
的翻译单元中,它都指向同一个定制点对象实例。(这意味着可以在内联函数和函数模板中自由使用它,而不会违反
单一定义规则
。)
返回值
M
表示从
i
的起始位置到终止位置的距离,若终止位置位于起始位置之前则该值为负。
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
将迭代器前进指定距离
(函数模板) |
|
|
返回迭代器与哨位之间的距离,或范围起始与末尾之间的距离
(函数模板) |
|
|
递增迭代器
(函数模板) |
|
|
递减迭代器
(函数模板) |