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

Примечания

Типичный класс input_or_output_iterator должен только быть movable и предоставить следующие члены:

  • Тип-член difference_type (используется std::iter_difference_t).
  • Префиксную операцию operator++, возвращающую ссылку на *this.
  • Постфиксную операцию operator++.
  • Оператор разыменования operator*.

В качестве альтернативы, difference_type можно предоставить, специализируя либо std::iterator_traits или std::incrementable_traits. Функции могут быть определены как нечлены, чтобы быть найденными с помощью поиска по зависимостям от аргументов.

Сам 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 не требует копируемости.

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

Spec-Zone.ru

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