C++ named requirements: LegacyOutputIterator
LegacyOutputIterator は、指し示す要素に書き込み可能な LegacyIterator です。
LegacyOutputIterator を実装する型の例は std::ostream_iterator です。
LegacyForwardIterator 、 LegacyBidirectionalIterator 、または LegacyRandomAccessIterator が、自身の要件に加えて LegacyOutputIterator の要件も満たす場合、それは mutable と記述されます。
目次 |
要件
型 X は以下の条件を満たす場合、 LegacyOutputIterator を満たします
- 型 X は LegacyIterator を満たす
- X はクラス型またはポインタ型である
そして、与えられた
-
o
、出力イテレータに書き込み可能な何らかの型の値(書き込み可能な型が複数存在する場合があります。例えば
operator
=
がテンプレートである場合など。
value_typeの概念は入力イテレータの場合とは異なり存在しません) - r 、型 X の左辺値、
以下の式は有効であり、指定された効果を持たなければならない
| 式 | 戻り値 | 同等の式 | 事前条件 | 事後条件 | 備考 |
|---|---|---|---|---|---|
| * r = o | (使用しない) | r が間接参照可能 | r がインクリメント可能 | この操作後、 r は間接参照可能である必要はなく、 r の前の値のコピーは、もはや間接参照可能またはインクリメント可能である必要はない。 | |
| ++ r | X & | r がインクリメント可能 | r と ++ r は同じイテレータオブジェクトを指し、 r は間接参照可能または末尾超過 | この操作後、 r はインクリメント可能である必要はなく、 r の前の値のコピーは、もはや間接参照可能またはインクリメント可能である必要はない。 | |
| r ++ | X & に変換可能 |
X temp
=
r
;
++
r
;
|
|||
| * r ++ = o | (使用しない) |
*
r
=
o
;
++ r ; |
注記
出力イテレータに対する operator * の唯一有効な使用方法は、代入式の左辺での使用です: operator * はプロキシオブジェクトを返す可能性があり、これはメンバー operator = (テンプレートである可能性があります)を定義します。
出力イテレータに対して等値性および非等値性は定義されない場合があります。 たとえ operator == が定義されていたとしても、 x == y が ++ x == ++ y を意味するとは限りません。
出力イテレータの同じ値を通じた代入は一度だけ発生します:出力イテレータに対するアルゴリズムはシングルパスアルゴリズムでなければなりません。
出力イテレータを通じた代入は、インクリメントと交互に行われることが期待されます。ダブルインクリメントは未定義動作です(C++標準は現在、STLドキュメントに反してダブルインクリメントがサポートされていると主張しています。これは LWG issue 2035 です)。
純粋な出力専用イテレータは、
iterator_traits
<
X
>
::
value_type
、
iterator_traits
<
X
>
::
difference_type
、
iterator_traits
<
X
>
::
pointer
、および
iterator_traits
<
X
>
::
reference
を
void
と宣言することが許可されています(
std::back_insert_iterator
などのイテレータはまさにそれを行います
、ただし
difference_type
は
std::output_iterator
を満たすように定義されています
(C++20以降)
)。
標準ライブラリ
以下の標準ライブラリイテレータは前方イテレータではない出力イテレータです:
|
std::basic_ostream
に書き込む出力イテレータ
(クラステンプレート) |
|
|
std::basic_streambuf
に書き込む出力イテレータ
(クラステンプレート) |
|
|
コンテナへの挿入のためのイテレータアダプタ
(クラステンプレート) |
|
|
コンテナの末尾への挿入のためのイテレータアダプタ
(クラステンプレート) |
|
|
コンテナの先頭への挿入のためのイテレータアダプタ
(クラステンプレート) |
関連項目
|
(C++20)
|
指定された値型に対する出力イテレータである型を指定する。つまり、その型の値を書き込むことができ、前置および後置インクリメントが可能である
(コンセプト) |
| Iterator library | イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供する |