std::experimental::ranges::ForwardIterator
From cppreference.com
< cpp | experimental | ranges
| Defined in header <experimental/ranges/iterator> |
||
| template< class I > concept bool ForwardIterator = |
(ranges TS) | |
ForwardIterator<I> コンセプトは、等価比較とマルチパス保証を追加することで InputIterator を洗練させたものです。
フォワードイテレータの == のドメインは、同じ基となるシーケンスに対するイテレータのドメインですが、同じ型の値初期化されたイテレータ同士は比較可能であり、等しいと評価されなければなりません。
範囲 [i, s) 内のフォワードイテレータから取得されたポインタと参照は、[i, s) が範囲を示し続ける限り有効でなければなりません。
I 型のデリファレンス可能なイテレータを a と b とします。ForwardIterator<I> は、以下の場合にのみ満たされます。
- a == b は ++a == ++b を意味すること。
- 式 ([](X x){ ++x; }(a), *a) は *a と等価であること。すなわち、
aのコピーをインクリメントしても、aのデリファレンスの結果に影響を与えないこと。
これは *マルチパス保証* として知られています。
[編集] 注釈
フォワードイテレータは「stashing」することはできません。イテレータ自身に含まれるオブジェクトへの参照を返すことはできません。なぜなら、そのような参照はフォワードイテレータの破棄によって無効になるからです。