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