Namespaces
Variants

std:: input_or_output_iterator

From cppreference.net
Iterator library
Iterator concepts
input_or_output_iterator
(C++20)

Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Определено в заголовочном файле <iterator>
template < class I >

concept input_or_output_iterator =
requires ( I i ) {
{ * i } - > /*can-reference*/ ;
} &&

std:: weakly_incrementable < I > ;
(начиная с C++20)

Концепт input_or_output_iterator формирует основу таксономии концептов итераторов; каждый тип итератора удовлетворяет требованиям input_or_output_iterator .

Экспозиционное понятие /*can-reference*/ удовлетворяется тогда и только тогда, когда тип является ссылаемым .

Примечания

input_or_output_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>);