std::input_or_output_iterator - cppreference.com

From cppreference.com

template<classI>conceptinput_or_output_iterator=requires(Ii){{*i}->/*can-reference*/;}&&std::weakly_incrementable<I>;(since C++20)The input_or_output_iterator concept forms the basis of the iterator concept taxonomy; every iterator type satisfies the input_or_output_iterator requirements.

The exposition-only concept /*can-reference*/ is satisfied if and only if the type is not (possibly cv-qualified) void.

Notes

input_or_output_iterator itself only specifies operations for dereferencing and incrementing an iterator. Most algorithms will require additional operations, for example:

comparing iterators with sentinels (see

sentinel_for

);

reading values from an iterator (see

indirectly_readable

and

input_iterator

);

writing values to an iterator (see

indirectly_writable

and

output_iterator

);

a richer set of iterator movements (see

forward_iterator

,

bidirectional_iterator

,

random_access_iterator

).

Unlike the

LegacyIterator

requirements, the input_or_output_iterator concept does not require copyability.

*i is required to be equality-preserving, although the increment operations required by

weakly_incrementable

are not.

Example

A minimum iterator.

#include<cstddef>#include<iterator>structSimpleIterator{usingdifference_type=std::ptrdiff_t;intoperator*();SimpleIterator&operator++();voidoperator++(int){++*this;}};static_assert(std::input_or_output_iterator<SimpleIterator>);