名前空間
変種
操作

std::experimental::ranges::RandomAccessIterator

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
イテレータライブラリ
イテレータのコンセプト
間接呼び出し可能コンセプト
                                                  
                                                  
                                                  
共通アルゴリズム要件
                                                  
Concept utilities
Iterator utilities and operations
Iterator traits
イテレータアダプタ
ストリームイテレータ
 
template< class I >

コンセプト 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 を拡張します。

ab を型 I の有効なイテレータで、ba から到達可能であるとし、nranges::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) と等しい。
  • 任意の2つの正の整数 xy について、a + (x + y) が有効であるならば、a + (x + y)(a + x) + y と等しい。
  • a + 0a と等しい。
  • もし (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 である。

[編集] 等価性保持

式が**等価性保持**であるとは、等しい入力に対して等しい出力を生成することを意味します。

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

等価性保持が要求されるすべての式は、さらに**安定**である必要があります。同じ入力オブジェクトでそのような式の2回の評価は、これらの入力オブジェクトの明示的な介入的な変更がない限り、等しい出力を持ちます。

特に断りがない限り、requires-expression で使用されるすべての式は、等価性を保持し、安定であることが要求され、式の評価は定数でないオペランドのみを変更できます。定数のオペランドは変更してはいけません。

[編集] 暗黙的な式バリエーション

ある定数左辺値オペランドに対して非変更的な式を使用する requires-expression は、明示的に異なる意味で要求されていない限り、そのオペランドに対して非定数左辺値または(定数であるか否かにかかわらず)右辺値を受け入れる、その式の追加のバリエーションも暗黙的に要求します。これらの 暗黙的な式バリエーション は、宣言された式の意味要件と同じ要件を満たさなければなりません。実装がこれらのバリエーションの構文をどの程度検証するかは未規定です。

English 日本語 中文(简体) 中文(繁體)