std:: input_or_output_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定義先ヘッダ
<iterator>
|
||
|
template
<
class
I
>
concept input_or_output_iterator
=
|
(C++20以降) | |
input_or_output_iterator
コンセプトはイテレータコンセプト分類体系の基礎を形成します。すべてのイテレータ型は
input_or_output_iterator
の要件を満たします。
説明専用コンセプト /*can-reference*/ は、型が referenceable である場合にのみ満たされる。
注記
input_or_output_iterator
自体はイテレータのデリファレンスとインクリメント操作のみを規定します。ほとんどのアルゴリズムは追加の操作を必要とします。例えば:
-
イテレータとセンチネルの比較(
sentinel_forを参照); -
イテレータからの値の読み取り(
indirectly_readableおよびinput_iteratorを参照); -
イテレータへの値の書き込み(
indirectly_writableおよびoutput_iteratorを参照); -
より豊富なイテレータ移動操作(
forward_iterator、bidirectional_iterator、random_access_iteratorを参照)。
LegacyIterator
要件とは異なり、
input_or_output_iterator
コンセプトはコピー可能性を要求しません。
*
i
は等価性を保持することが要求されるが、
weakly_incrementable
で要求されるインクリメント操作は等価性を保持しない。
例
最小イテレータ。
#include <cstddef> #include <iterator> struct SimpleIterator { using difference_type = std::ptrdiff_t; int operator*(); SimpleIterator& operator++(); void operator++(int) { ++*this; } }; static_assert(std::input_or_output_iterator<SimpleIterator>);