名稱空間
變體
操作

C++ 命名要求: LegacyInputIterator

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
LegacyInputIterator(傳統輸入迭代器)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

一個 LegacyInputIterator 是一個 LegacyIterator,它可以從指向的元素中讀取。 LegacyInputIterator 只保證單趟演算法的有效性:一旦一個 LegacyInputIterator i 被遞增,其之前值的所有副本可能會失效。

目錄

[編輯] 要求

型別 定義
X 輸入迭代器型別
T X值型別(即 std::iterator_traits<X>::value_type
R std::iterator_traits<X>::reference
定義
i, j 型別為 Xconst X 的值
r 型別為 X& 的值
其他 定義
m 可能表示資料成員或成員函式的識別符號


如果滿足以下所有條件,則 X 滿足 LegacyInputIterator

 表示式  型別 語義
i != j
滿足 BooleanTestable 的型別 (C++20 前)
建模 boolean-testable 的型別 (C++20 起)
前置條件 ij==中。
效果 等價於 !(i == j)
*i R,可轉換為 T 前置條件 i可解引用的
效果
  • 表示式 (void)*i, *i 等價於 *i
  • 如果 ij== 的域中,並且 i == j,則 *i 等價於 *j
i->m 前置條件 i 是可解引用的。
效果 等價於 (*i).m
++r X& 前置條件 r 是可解引用的。
後置條件 
  • r 是可解引用的或 r 是尾後迭代器。
  • r 之前值的任何副本不再要求是可解引用的或在 == 的域中。
(void)r++ 效果 等價於 (void)++r
*r++ 可轉換為 T 效果 等價於 T x = *r; ++r; return x;

[編輯] 相等域

術語 == 的域 在數學的通常意義上使用,表示可以使用 == 進行比較的值的集合。這個集合可以隨時間變化。

每個演算法都對其使用的迭代器值的相等域提出額外的要求。這些要求可以從該演算法對 ==!= 的使用中推斷出來。

[編輯] 注意

對於不是 LegacyForwardIterator 的輸入迭代器 Xstd::iterator_traits<X>::reference 不必是引用型別:解引用輸入迭代器可能會返回一個代理物件或按值返回 std::iterator_traits<X>::value_type 本身(如 std::istreambuf_iterator 的情況)。

概念

對於 std::iterator_traits 的定義,定義了以下僅用於說明的概念。

template<class I>

concept __LegacyInputIterator =
__LegacyIterator<I> && std::equality_comparable<I> && requires(I i)
{
    typename std::incrementable_traits<I>::difference_type;
    typename std::indirectly_readable_traits<I>::value_type;
    typename std::common_reference_t<std::iter_reference_t<I>&&,
                                     typename std::indirectly_readable_traits<I>::value_type&>;
    *i++;
    typename std::common_reference_t<decltype(*i++)&&,
                                     typename std::indirectly_readable_traits<I>::value_type&>;
    requires std::signed_integral<typename std::incrementable_traits<I>::difference_type>;

};

其中僅用於說明的概念 __LegacyIteratorLegacyIterator 中描述。

(C++20 起)

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 98 C++98 要求 *i++ 的返回型別為 T 它可以是任何可轉換為 T 的型別
LWG 2114
(P2167R3)
C++98 轉換為 bool 的能力太弱
未能反映實現預期
要求已加強

[編輯] 參閱

指定型別是一個輸入迭代器,即其引用的值可讀,並且可以進行前置和後置增量
(概念) [編輯]
迭代器庫 為迭代器、迭代器特性、介面卡和實用函式提供定義