名前空間
変種
操作

名前付き要件: ForwardIterator

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
 

ForwardIterator はその指す先の要素からデータを読み込むことができる Iterator です。

InputIteratorOutputIterator と異なり、マルチパスアルゴリズムで使用することができます。

目次

[編集] 要件

以下の内容を満たす場合、型 ItForwardIterator を満たします。

  • ItInputIterator を満たす。
  • ItDefaultConstructible を満たす。
  • It 型のオブジェクトが後述のマルチパス保証を提供する。
  • std::iterator_traits<It>::reference が、
  • ItOutputIterator を満たすならば (It が可変ならば) T& であり、
  • そうでなければ ((It が定数であれば) const T& である。
(ただし Tstd::iterator_traits<It>::value_type によって表される型です)
  • 等しいおよび等しくないの比較は同じベースとなるシーケンスに対するすべてのイテレータおよび値初期化されたイテレータ (C++14およびそれ以降)に渡って定義されます。

さらに、

  • It 型の逆参照可能なイテレータ i
  • std::iterator_traits<It>::reference によって表される型 reference

が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。

戻り値の型 同等な式 注釈
i++ It It ip=i; ++i; return ip;
*i++ reference

可変ForwardIteratorOutputIterator の要件を追加で満たす ForwardIterator です。

[編集] マルチパス保証

It 型の逆参照可能なイテレータ a, b が与えられたとき、

  • ab が等しい (a == b が文脈的に true に変換できる) 場合、それらがどちらも逆参照可能でないか、 *a*b が同じオブジェクトに束縛される参照であるかの、いずれかです。
  • *a*b が同じオブジェクトを参照している場合は、 a == b です。
  • 可変な ForwardIterator イテレータを通した代入はイテレータを無効化しません (reference が真の参照として定義されることによる暗黙の事柄です)。
  • a のコピーをインクリメントしても a から読み込まれる値は変わりません (形式的には、 It が生のポインタ型であるか、式 (void)++It(a), *a が式 *a と同等であるかの、いずれかです)。
  • a == b であれば ++a == ++b が暗黙に成り立ちます。

単数イテレータ

値初期化された ForwardIterator は何らかの未規定な空のコンテナの終端イテレータであるかのように動作します。 同じ型の値初期化されたすべての ForwardIterator は等しく比較されます。
(C++14およびそれ以降)

[編集] 関連項目

InputIterator が等しさの比較とマルチパスをサポートする前進イテレータであることを指定します
(コンセプト) [edit]