Руководство по стандартной библиотеке шаблонов STL

Итераторы ввода (Input iterators)


Класс или встроенный тип X удовлетворяет требованиям итератора ввода для значимого типа T, если справедливы следующие выражения:

Таблица 2. Требования итератора ввода
выражение возвращаемый тип семантика исполнения утверждение/примечание
состояние до/после


X(a) . . X(a)- копия a.
примечание: предполагается деструктор.
X u(a);
X u = a;
. . после: u - копия a.
u = a X& . после: u - копия a.
a == b обратимый в bool . если a - копия b, тогда a == b возвращает true.
== - это отношение эквивалентности в области действия ==.
a != b обратимый в bool !(a == b) .
*a обратимый в T . до: a - разыменовываемое.
если a - копия b, то *a эквивалентно *b.
++r X& . до: r - разыменовываемое.
после:r - разыменовываемое или r - законечное.
void r++ void void ++r .
*r++ Т { X tmp = r;
++r;
return tmp; }
.

    ПРИМЕЧАНИЕ. Для итераторов ввода нет никаких требований на тип или значение r++ кроме требования, чтобы *r++ работал соответственным образом. В частности, r == s не подразумевает, что ++r == ++s. (Равенство не гарантирует свойство замены или ссылочной прозрачности.) Что касается ++r, то нет больше никаких требований на значения любых копий r за исключением того, что они могут быть безопасно уничтожены или присвоены. После выполнения ++r не требуется, чтобы были копии (предыдущего) r в области ==. Алгоритмы с итераторами ввода никогда не должны пытаться проходить через тот же самый итератор дважды. Они должны быть однопроходными (single pass) алгоритмами. Не требуется, чтобы значимый тип T был леводопустимым типом (lvalue type). Эти алгоритмы могут использоваться с входными потоками как источниками входных данных через класс istream_iterator.



Содержание раздела