C++ наимённые требования: LegacyInputIterator
A LegacyInputIterator — это LegacyIterator, который может считывать данные из указываемого элемента. LegacyInputIterator гарантирует валидность только для алгоритмов однократного прохода: после инкрементирования LegacyInputIterator i все копии его предыдущего значения могут быть невалидными.
Требования
Тип It удовлетворяет требованиям LegacyInputIterator, если
- Тип
Itудовлетворяет требованиям LegacyIterator - Тип
Itудовлетворяет требованиям EqualityComparable
И, при условии
-
iиj, значения типаItилиconst It -
r, lvalue типаIt -
reference, тип, обозначаемыйstd::iterator_traits<It>::reference -
value_type, тип, обозначаемыйstd::iterator_traits<It>::value_type
Следующие выражения должны быть валидными и иметь указанные эффекты
| Выражение | Тип возвращаемого значения | Эквивалентное выражение | Примечания |
|---|---|---|---|
i != j | контекстуально преобразуется в bool
| !(i == j) |
Предварительное условие: (i, j) находится в области определения ==. |
*i |
reference, преобразуемое в value_type
| Если i == j и (i, j) находятся в области определения ==, то это эквивалентно *j. | Предварительное условие: Выражение |
i->m | (*i).m |
Предварительное условие: i разрешается для разыменования. |
|
++r | It& | Предварительное условие: Последующее условие: Последующее условие: Любые копии предыдущего значения |
|
(void)r++ | (void)++r | ||
*r++ | преобразуемое в value_type |
value_type x = *r; ++r; return x; |
Примечания
"в области определения ==" означает, что сравнение на равенство определено между двумя значениями итератора. Для входных итераторов сравнение на равенство не обязательно должно быть определено для всех значений, и множество значений в области определения == может меняться со временем.
Тип reference для входного итератора, который также не является LegacyForwardIterator, не обязательно должен быть типом ссылки: разыменование входного итератора может вернуть объект-прокси или value_type само по себе по значению (как в случае с std::istreambuf_iterator).
КонцепцияДля определения
где концепция только для объяснения | (с C++20) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применимо к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 98 | C++98 | тип возвращаемого значения *i++ был value_type | он может быть любым типом, преобразуемым в value_type |
См. также
|
(C++20) | указывает, что тип является входным итератором, т. е. его значения могут быть считываемыми, и он может быть как предварительно, так и пост-инкрементированным (концепция) |
| Библиотека итераторов | предоставляет определения для итераторов, признаков итераторов, адаптеров и вспомогательных функций |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/InputIterator