Spec-Zone.ru › C++

std::input_or_output_iterator

Определён в заголовочном файле <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*/ удовлетворяется тогда и только тогда, когда тип не является (возможно, cv-квалифицированным) void.

Примечания

Сама концепция 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>);

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/input_or_output_iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API