Namespaces
Variants

std::experimental::ranges:: advance

From cppreference.net
ヘッダーで定義 <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 に達するまで進める(いずれか早い方)。

1) I RandomAccessIterator をモデル化する場合、 i + = n と等価。それ以外の場合、 n が負の場合はデクリメント(正の場合はインクリメント)を i に対して n 回実行する。 n が負であり、かつ I BidirectionalIterator をモデル化しない場合、動作は未定義。
2) もし Assignable < I & , S > が満たされる場合、 i = std :: move ( bound ) と同等です。
それ以外の場合、 [ i , bound ) が範囲を表さない場合、動作は未定義です。
それ以外の場合、 SizedSentinel < S, I > が満たされる場合、以下と等価 ranges:: advance ( i, bound - i )
それ以外の場合、 i i == bound になるまでインクリメントする。
3) SizedSentinel < S, I > が満たされる場合、| n | >= | bound - i | のときは ranges:: advance ( i, bound ) と等価、それ以外の場合は ranges:: advance ( i, n ) と等価。
それ以外の場合、 n が負の場合は減算(正の場合は加算)を行い、 i n 回、または 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 に違反しないことを意味します。)

戻り値

1,2) (なし)
3) 境界値に達したために実行されなかったインクリメント/デクリメントの回数。言い換えると、 bound 。つまり、 n - M 、ここで M i の開始位置から終了位置までの距離であり、終了位置が開始位置より前にある場合は負の値となる。

関連項目

イテレータを指定された距離だけ進める
(関数テンプレート)
イテレータとセンチネル間、または範囲の先頭と終端間の距離を返す
(関数テンプレート)
イテレータをインクリメントする
(関数テンプレート)
イテレータをデクリメントする
(関数テンプレート)