std::input_or_output_iterator
From cppreference.com
| ヘッダ <iterator> で定義 |
||
| template< class I > concept input_or_output_iterator = |
(C++20以降) | |
input_or_output_iterator コンセプトは、イテレータの概念分類の基礎を形成します。すべてのイテレータ型は、input_or_output_iterator の要件を満たします。
公開用のみのコンセプト /*参照可能*/ は、その型が 参照可能である場合にのみ満たされます。
[編集] 注釈
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>);