std::experimental::ranges::RandomAccessIterator

出自cppreference.com
 
 
實驗性
技術規範
文件系統庫 (文件系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行擴展 (並行 TS)
並行擴展 2 (並行 TS v2)
並發擴展 (並發 TS)
並發擴展 2 (並發 TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函數 (特殊函數 TR)
實驗性非 TS 功能特性
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
迭代器庫
迭代器概念
間接可調用概念
                                                  
                                                  
                                                  
常用算法要求
                                                  
概念工具
迭代器工具及運算
迭代器特徵
迭代器適配器
流迭代器
 
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>>;
    };
(範圍 TS)

概念 RandomAccessIterator<I> 細化 BidirectionalIterator,添加用 +=-=+- 運算符的常數時間前進、用 - 的常數時間距離計算,及帶下標的數組記法支持。

abI 類型的合法迭代器,使得從 a 可抵達 b,並令 n 為等於 b - aranges::difference_type_t<I> 類型值。RandomAccessIterator<I> 僅若符合下列條件才得到滿足:

  • (a += n) 等於 b
  • std::addressof(a += n) 等於 std::addressof(a)
  • (a + n) 等於 (a += n)
  • (a + n) 等於 (n + a)
  • 對於任何二個正整數 xy,若 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

相等性保持

若表達式對給定的相等輸入產生相等輸出,則它保持相等性

  • 表達式的輸入由其操作數組成。
  • 表達式的輸出由其結果和表達式所修改的所有操作數(若存在)組成。

每個要求保持相等性的表達式還進一步要求是穩定的:以相同輸入對象對這種表達式進行兩次求值必須擁有相等的輸出,而無任何對這些輸入對象的顯式中間修改。

除非另外提醒,每個用於 requires 表達式中的表達式都要求保持相等性且穩定,而表達式的求值必須只修改其非 const 操作數。必須不修改常運算數。

隱式表達式變種

使用不修改某 const 左值操作數的表達式的 requires 表達式亦隱式要求該表達式的額外變種對給定操作數接受非 const 左值或(可為 const 的)右值,除非以有區別的語義顯式要求這種表達式變種。這些隱式表達式變種必須符合與聲明的表達式的相同的語義。不指定實現以何種程度校驗變種的語法。