Namespaces
Variants

std::experimental::ranges:: RandomAccessIterator

From cppreference.net
template < class I >

concept bool RandomAccessIterator =
BidirectionalIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: random_access_iterator_tag > &&
StrictTotallyOrdered < I > &&
SizedSentinel < I, I > &&
requires ( I i, const I j, const ranges :: difference_type_t < I > n ) {
{ i + = n } - > Same < I > & ;
{ j + n } - > Same < I > && ;
{ n + j } - > Same < I > && ;
{ i - = n } - > Same < I > & ;
{ j - n } - > Same < I > && ;
j [ n ] ;
requires Same < decltype ( j [ n ] ) , ranges :: reference_t < I >> ;

} ;
(ranges TS)

RandomAccessIterator<I> コンセプトは、 BidirectionalIterator を改良し、 += + -= 、および - 演算子による定数時間での前進・後退のサポート、 - による定数時間での距離計算のサポート、 そして添字演算子による配列表記のサポートを追加します。

a b を型 I の有効なイテレータとし、 b a から到達可能であり、 n を型 ranges :: difference_type_t < I > の値で b - a に等しいものとする。 RandomAccessIterator<I> は以下の条件を満たす場合にのみ充足される:

  • ( a + = n ) b と等しい。
  • std:: addressof ( a + = n ) std:: addressof ( a ) と等しい。
  • ( a + n ) ( a + = n ) と等しい。
  • ( a + n ) ( n + a ) と等しい。
  • 任意の正の整数 x y について、 a + ( x + y ) が有効な場合、 a + ( x + y ) ( a + x ) + y と等しい。
  • a + 0 a と等しい。
  • ( a + ( n - 1 ) ) が有効な場合、 -- b ( a + ( n - 1 ) ) と等しい。
  • ( b + = - n ) ( b - = n ) は両方とも a と等しい。
  • std:: addressof ( b - = n ) std:: addressof ( b ) と等しい。
  • ( b - n ) ( b - = n ) と等しい。
  • b がデリファレンス可能な場合、 a [ n ] は有効であり、 * b と等しい。
  • bool ( a <= b ) true である。

等価性保存

式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。

  • 式への入力は、そのオペランドで構成されます。
  • 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。

特に明記されていない限り、 requires式 で使用される各式は、等価性を保存し安定していることが要求され、式の評価は非定数オペランドのみを変更できます。定数オペランドは変更してはなりません。

暗黙的な式のバリエーション

requires-expression は、特定の定数左辺値オペランドに対して非変更的な式を使用する場合、そのオペランドに対して非定数左辺値または(場合によっては定数の)右辺値を受け入れる式の追加バリエーションも暗黙的に要求します。ただし、異なるセマンティクスを持つ式バリエーションが明示的に要求されている場合は除きます。これらの implicit expression variations は、宣言された式と同じセマンティック要件を満たさなければなりません。実装がこれらのバリエーションの構文をどこまで検証するかは未規定です。