std::experimental::ranges::advance
From cppreference.com
< cpp | experimental | ranges
| Defined in header <experimental/ranges/iterator> |
||
| 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 に到達するまで進めます。どちらかが先に発生した場合、そこで停止します。
1)
I が RandomAccessIterator をモデルとする場合、i += n と同等です。そうでない場合、i を n 回インクリメント(または n が負の場合はデクリメント)します。n が負であり、かつ I が BidirectionalIterator をモデルとしない場合、未定義の動作となります。2) Assignable<I&, S> が満たされる場合、i = std::move(bound) と同等です。
それ以外で、
[i, bound) が範囲を規定しない場合、未定義の動作となります。 それ以外で、SizedSentinel<S, I> が満たされる場合、ranges::advance(i, bound - i) と同等です。
それ以外の場合、i == bound になるまで i をインクリメントします。
3) SizedSentinel<S, I> が満たされる場合、|n| >= |bound - i| の場合は ranges::advance(i, bound) と同等で、そうでない場合は ranges::advance(i, n) と同等です。
それ以外の場合、n 回、または i == bound になるまで(どちらかが先に発生した場合)、i をインクリメント(または n が負の場合はデクリメント)します。
n > 0 の場合、
[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 が定義されているすべての翻訳単位において、カスタマイズポイントオブジェクトの同じインスタンスを参照します。(これは、インライン関数や関数テンプレートなどでの使用において、one-definition rule に違反することなく自由に使用できることを意味します。)
[編集] 戻り値
1,2) (なし)
3) bound に到達したために実行されなかったインクリメント/デクリメントの回数。言い換えると、n - M です。ここで
M は、i の開始位置から終了位置までの距離であり、終了位置が開始位置より前にある場合は負になります。[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| イテレータを指定された距離だけ進める (関数テンプレート) | |
| イテレータとセンチネルの間の距離、または範囲の開始と終了の間の距離を返します。 (function template) | |
| イテレータをインクリメントする (function template) | |
| イテレータをデクリメントする (function template) |