Класс или указатель типа X удовлетворяет требования входного итератора для типа значения ,T если X удовлетворяют Iterator и EqualityComparable требования и выражение , приведенные в таблице 95 , действительны и имеют указанную семантику.
В Таблице 95этот термин the domain of == используется в обычном математическом смысле для обозначения набора значений, для которых == (требуется) определение. Этот набор может меняться со временем. Каждый алгоритм предъявляет дополнительные требования к области == значений используемых итераторов. Эти требования могут быть выведены из использования алгоритма == и !=. [ Example: Вызов find(a,b,x) определяется только в том случае, если значение a имеет свойство, p определенное следующим образом: b имеет свойство, p а значение i имеет свойство p if (*i==x) или if (*i!=x и ++i имеет свойство p). ] — end example
Выражение | Тип возврата | Оперативный | Утверждение / примечание |
семантика | до / после состояния | ||
a != b | контекстно конвертируемый в bool | !(a == b) | Requires: (a, b) находится в домене ==. |
*a | reference, конвертируемый в T |
Requires: a разыменуемо. Выражение (void)*a, *a эквивалентно *a. Если a == b и (a, b) находится в домене, == то *a эквивалентно *b. | |
a->m | (*a).m | Requires: a разыменуемо. | |
++r | X& |
Requires: r разыменуемо. Postconditions: r разыменован или окончен r ; любые копии предыдущего значения r больше не должны быть разыменованными или находиться в домене ==. | |
(void)r++ | эквивалентно (void)++r | ||
*r++ | конвертируемый в T |
{ T tmp = *r; ++r; return tmp; } |
[ Note: Для итераторов ввода a == b не означает ++a == ++b. (Равенство не гарантирует свойство подстановки или ссылочную прозрачность.) Алгоритмы на итераторах ввода никогда не должны пытаться пройти через один и тот же итератор дважды. Это должны быть single pass алгоритмы. Тип значения T не обязательно должен быть CopyAssignable типом. Эти алгоритмы могут использоваться с istreams в качестве источника входных данных через istream_iterator шаблон класса. ] — end note