名前空間
変種
操作

名前付き要件: LegacyOutputIterator

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
レイアウト
ライブラリ全体
コンテナ
コンテナの要素
イテレータ
ストリーム入出力
乱数
並行処理
(C++11)

(C++11)
(C++11)
その他
 

LegacyOutputIterator はその指す先の要素に書き込むことができる LegacyIterator です。

LegacyOutputIterator を実装する型の例は std::ostream_iterator です。

LegacyForwardIteratorLegacyBidirectionalIterator または LegacyRandomAccessIterator がそれ自身の要件に加えて LegacyOutputIterator の要件を満たすとき、それは可変であると言います。

目次

[編集] 要件

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

  • XLegacyIterator を満たす
  • X がクラス型またはポインタ型である

さらに、

  • その出力イテレータに書き込むことができる何らかの型の値 o (例えば operator= がテンプレートの場合など、書き込むことができる型は複数ある可能性があります。 入力イテレータに対する value_type のようなものはありません。)
  • X 型の左辺値 r

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

戻り値 同等な式 事前条件 事後条件 注釈
*r = o (未使用) r が逆参照可能。 r がインクリメント可能。 この操作の後、 r が逆参照可能であることは要求されず、 r の以前の値のあらゆるコピーが逆参照可能またはインクリメント可能であることはもはや要求されません。
++r X& r がインクリメント可能。 r++r が同じイテレータオブジェクトを指し示す。 r が逆参照可能または終端である。 この操作の後、 r がインクリメント可能であることは要求されず、 r の以前の値のあらゆるコピーが逆参照可能またはインクリメント可能であることはもはや要求されません。
r++ const X& に変換可能。 X temp = r;

++r;
return temp;

*r++ = o (未使用) *r = o;

++r;

[編集] ノート

出力イテレータの operator* の有効な使用方法は代入の左辺だけです。 operator*operator= (テンプレートの場合もあります) を定義するプロキシオブジェクトを返す場合があります。

等しいおよび等しくないは出力イテレータに対して定義されない場合があります。 たとえ operator== が定義されていても x == y のときに ++x == ++y が暗黙に成り立つとは限りません。

同じ出力イテレータの値を通した代入は一度だけ発生します。 出力イテレータに対するアルゴリズムはシングルパスのアルゴリズムでなければなりません。

出力イテレータを通した代入はインクリメントと交互に行われることが期待されます。 二重インクリメントは未定義動作です (STL のドキュメントに反して現在のところ C++ 標準は二重インクリメントはサポートされると主張しています。 LWG #2035 を参照してください)。

純粋な出力専用のイテレータは iterator_traits<X>::value_typeiterator_traits<X>::difference_typeiterator_traits<X>::pointer および iterator_traits<X>::referencevoid であると宣言しても構いません (std::back_insert_iterator などのイテレータはまさにそうしています)。

[編集] 標準ライブラリ

以下の標準ライブラリのイテレータは前進イテレータでない出力イテレータです。

[編集] 関連項目

型が指定された値型のための出力イテレータである、つまり、その型の値を書き込むことができ、前置および後置インクリメントがどちらも可能であることを表します
(コンセプト) [edit]