C++ named requirements: LegacyInputIterator
LegacyInputIterator — это LegacyIterator , который может читать данные из указываемого элемента. LegacyInputIterator гарантирует корректность только для алгоритмов однократного прохода: после того как LegacyInputIterator i был инкрементирован, все копии его предыдущего значения могут стать невалидными.
Содержание |
Требования
| Тип | Определение |
X
|
Тип входного итератора |
T
|
Тип значения
для
X
(т.е.
std::
iterator_traits
<
X
>
::
value_type
)
|
R
|
std:: iterator_traits < X > :: reference |
| Значение | Определение |
| i , j |
Значения типа
X
или
const
X
|
| r |
Значение типа
X&
|
| Другое | Определение |
m
|
Идентификатор, который может обозначать член данных или функцию-член |
X
удовлетворяет требованиям
LegacyInputIterator
если выполняются все следующие условия:
-
Xудовлетворяет требованиям LegacyIterator . -
Xудовлетворяет требованиям EqualityComparable . - Следующие выражения являются корректными и имеют указанную семантику:
| Выражение | Тип | Семантика | |||||
|---|---|---|---|---|---|---|---|
| i ! = j |
|
Предусловие | i и j находятся в области определения оператора == . | ||||
| Эффект | Эквивалентно ! ( i == j ) . | ||||||
| * i |
R
, преобразуемый в
T
|
Предусловие | i является разыменовываемым . | ||||
| Эффект |
|
||||||
| i - > m | Предусловие | i является разыменовываемым. | |||||
| Эффект | Эквивалентно ( * i ) . m . | ||||||
| ++ r |
X&
|
Предусловие | r является разыменовываемым. | ||||
| Постусловие |
|
||||||
| ( void ) r ++ | Эффект | Эквивалентно ( void ) ++ r . | |||||
| * r ++ |
преобразуемый в
T
|
Эффект | Эквивалентно T x = * r ; ++ r ; return x ; . | ||||
Домен равенства
Термин область определения == используется в обычном математическом смысле для обозначения множества значений, которые можно сравнивать с помощью == . Это множество может изменяться со временем.
Каждый алгоритм накладывает дополнительные требования на область равенства для значений итераторов, которые он использует. Эти требования могут быть выведены из использования, которое алгоритм делает из == и ! = .
Примечания
Для входного итератора
X
, который не является
LegacyForwardIterator
,
std::
iterator_traits
<
X
>
::
reference
не обязан быть ссылочным типом: разыменование входного итератора может возвращать прокси-объект или сам
std::
iterator_traits
<
X
>
::
value_type
по значению (как в случае с
std::istreambuf_iterator
).
КонцептДля определения std::iterator_traits определяется следующий демонстрационный концепт.
где демонстрационный концепт
|
(начиная с C++20) |
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 98 | C++98 |
the return type of
*
i
++
was required to be
T
|
it can be any type convertible to
T
|
|
LWG 2114
( P2167R3 ) |
C++98 |
convertibility to
bool
was too weak to
reflect the expectation of implementations |
requirements strengthened |
Смотрите также
|
(C++20)
|
определяет, что тип является итератором ввода, то есть его указываемые значения могут быть прочитаны и он может быть как пре-, так и постинкрементирован
(концепт) |
| Библиотека итераторов | предоставляет определения для итераторов, характеристик итераторов, адаптеров и служебных функций |