std::experimental::ranges:: advance
|
ヘッダーで定義
<experimental/ranges/iterator>
|
||
|
namespace
{
constexpr
/* unspecified */
advance
=
/* unspecified */
;
|
(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
と等価。それ以外の場合、
n
が負の場合はデクリメント(正の場合はインクリメント)を
i
に対して
n
回実行する。
n
が負であり、かつ
I
が
BidirectionalIterator
をモデル化しない場合、動作は未定義。
[
i
,
bound
)
が範囲を表さない場合、動作は未定義です。
n
が
n
>
0
の場合、
[
i
,
bound
)
は範囲を表す。
n
が
n
==
0
の場合、
[
i
,
bound
)
または
[
bound
,
i
)
のいずれかが範囲を表す。
n
が
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
が定義されるすべての翻訳単位において、これは同一のカスタマイゼーションポイントオブジェクトのインスタンスを参照します。(これは、インライン関数や関数テンプレート内で自由に使用でき、
One Definition Rule
に違反しないことを意味します。)
戻り値
M
は
i
の開始位置から終了位置までの距離であり、終了位置が開始位置より前にある場合は負の値となる。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
イテレータを指定された距離だけ進める
(関数テンプレート) |
|
|
イテレータとセンチネル間、または範囲の先頭と終端間の距離を返す
(関数テンプレート) |
|
|
イテレータをインクリメントする
(関数テンプレート) |
|
|
イテレータをデクリメントする
(関数テンプレート) |