std:: input_iterator
|
Определено в заголовочном файле
<iterator>
|
||
|
template
<
class
I
>
concept input_iterator
=
|
(начиная с C++20) | |
Концепт
input_iterator
является уточнением
input_or_output_iterator
, добавляя требование, чтобы на ссылочные значения можно было читать (через
indirectly_readable
) и требование наличия тега концепта итератора.
Содержание |
Определение концепции итератора
Определение этой концепции задаётся с помощью экспозиционно-ограниченного псевдонима шаблона /*ITER_CONCEPT*/ .
Чтобы определить /*ITER_CONCEPT*/ < I > , пусть ITER_TRAITS < I > обозначает I , если специализация std:: iterator_traits < I > сгенерирована из первичного шаблона, или std:: iterator_traits < I > в противном случае:
- Если ITER_TRAITS < I > :: iterator_concept корректен и именует тип, /*ITER_CONCEPT*/ < I > обозначает этот тип.
- Иначе, если ITER_TRAITS < I > :: iterator_category корректен и именует тип, /*ITER_CONCEPT*/ < I > обозначает этот тип.
-
Иначе, если
std::
iterator_traits
<
I
>
сгенерирован из первичного шаблона,
/*ITER_CONCEPT*/
<
I
>
обозначает
std::random_access_iterator_tag
.
(То есть предполагается, что std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > равно true .) - Иначе, /*ITER_CONCEPT*/ < I > не обозначает тип и приводит к ошибке подстановки.
Примечания
В отличие от требований
LegacyInputIterator
, концепт
input_iterator
не требует
equality_comparable
, поскольку input iterators обычно сравниваются с sentinels.
Пример
Минимальный входной итератор.
#include <cstddef> #include <iterator> class SimpleInputIterator { public: using difference_type = std::ptrdiff_t; using value_type = int; int operator*() const; SimpleInputIterator& operator++(); void operator++(int) { ++*this; } }; static_assert(std::input_iterator<SimpleInputIterator>);
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.
Смотрите также
|
(C++20)
|
определяет, что объекты типа могут быть инкрементированы и разыменованы
(concept) |
|
(C++20)
|
определяет, что
input_iterator
является прямым итератором, поддерживающим сравнение на равенство и многопроходность
(concept) |