Namespaces
Variants

std::experimental::ranges:: ForwardIterator

From cppreference.net
template < class I >

concept bool ForwardIterator =
InputIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: forward_iterator_tag > &&
Incrementable < I > &&

Sentinel < I, I > ;
(ranges TS)

ForwardIterator<I> の概念は、 InputIterator を等値比較とマルチパス保証を追加することで洗練させたものです。

前方イテレータにおける == の定義域は、同じ基盤となるシーケンス上のイテレータですが、同じ型の値初期化されたイテレータ同士は比較可能であり、かつ等価と判定されるものとします。

前方イテレータから取得したポインタと参照は、 [ i , s ) が範囲を表し続ける間、有効でなければならない。

a b を型 I の二つのデリファレンス可能なイテレータとする。 ForwardIterator<I> は以下の場合にのみ満たされる:

  • a == b ++ a == ++ b を意味する;および
  • ( [ ] ( X x ) { ++ x ; } ( a ) , * a ) * a と等価である。すなわち、 a のコピーをインクリメントしても、 a のデリファレンス結果には影響しない。

これは multi-pass guarantee として知られています。

注記

フォワードイテレータは「隠し場所」を持つことができません:それは自身の内部にあるオブジェクトへの参照を返すことができません。なぜなら、そのような参照はフォワードイテレータの破棄によって無効化されるからです。