C++ 命名需求: LegacyForwardIterator
LegacyForwardIterator 是一種 LegacyIterator,可以從所指向的元素中讀取資料。
與 LegacyInputIterator 和 LegacyOutputIterator 不同,它可以在多趟演算法中使用。
如果一個 LegacyForwardIterator it 源自一個 Container,那麼 it 的值型別與容器的值型別相同,因此解引用 (*it) 獲取容器的值型別。
目錄 |
[編輯] 要求
型別 | 定義 |
X
|
前向迭代器型別 |
T
|
X 的值型別(即 std::iterator_traits<X>::value_type) |
Ref
|
std::iterator_traits<X>::reference |
值 | 定義 |
i, j | 型別為 X 或 const X 的值 |
r | 型別為 X& 的值 |
如果滿足以下所有條件,則 X
滿足 LegacyForwardIterator
-
X
滿足 LegacyInputIterator。 -
X
滿足 DefaultConstructible。 - 如果
X
是一個可變迭代器,則Ref
是對T
的引用。 - 如果
X
是一個常量迭代器,則Ref
是對 const T 的引用。 - 型別
X
的物件提供多趟保證。 - 如果 i 和 j 相等,那麼 i 和 j 要麼都可以解引用,要麼都不能解引用。
- 如果 i 和 j 都可以解引用,那麼 i == j 當且僅當 *i 和 *j 繫結到同一個物件。
- 以下表達式必須有效並具有其指定的效果
表示式 | 型別 | 效果 |
---|---|---|
r++ | 可轉換為 const X& | 等價於 X x = r; ++r; return x;。 |
*i++ | Ref
|
[編輯] 相等域
然而,值初始化的前向迭代器可以比較,並且必須與相同型別的其他值初始化迭代器比較相等。 換句話說,值初始化的前向迭代器表現得好像它們引用了同一個空序列的末尾之外的位置。 |
(C++14 起) |
[編輯] 多趟保證
型別 X
的兩個可解引用迭代器 a 和 b 如果滿足以下所有條件,則提供多趟保證
- a == b 蘊含 ++a == ++b。
- 滿足以下任何條件:
-
X
是一種指標型別。 - 表示式 (void)++X(a), *a 等價於表示式 *a。
-
概念對於 std::iterator_traits 的定義,定義了以下僅用於說明的概念。
其中,僅用於展示的 concept |
(C++20 起) |
[編輯] 注意
與 std::forward_iterator 概念不同,LegacyForwardIterator 要求解引用返回一個引用。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 1212 (N3066) |
C++98 | *i++ 的型別與 LegacyBidirectionalIterator 所要求的 *i-- 的型別不匹配 |
將型別 更改為 Ref |
LWG 1311 (N3066) |
C++98 | “a == b 蘊含 ++a == ++b” 單獨 不提供多趟保證[1] |
還要求 “a == b 蘊含 ++a != b”[2] |
LWG 3798 | C++20 | __LegacyForwardIterator 要求std::iter_reference_t<It> 必須是左值引用型別 |
也允許右值 引用型別 |
[編輯] 另請參閱
(C++20) |
指定input_iterator 是前向迭代器,支援相等比較和多趟遍歷(concept) |
迭代器庫 | 為迭代器、迭代器特性、介面卡和實用函式提供定義 |