Имеются два варианта конструктора для итератора потокового чтения istream_iterator: вариант с параметром-потоком stream создает итератор для чтения из данного потока, вариант без параметров создает итератор, обозначающий конец потока (все итераторы, обозначающие конец потока, считаются равными друг другу и не равными никаким другим итераторам потокового чтения).
Ниже перечислены свойства потоковых итераторов чтения:
• тип T определяет тип элементов данных, которые считываются из потока;
• чтение элемента из потока выполняется в начальный момент работы с итератором, а затем при каждой операции инкремента ++;
• имеются два варианта операции ++: префиксный инкремент (++p) и постфиксный инкремент (p++);
• операция >* (и ее вариант ->) возвращает последнее прочитанное значение, причем эту операцию можно использовать неоднократно для получения того же самого значения;
• при достижении конца потока итератор становится равным итератору конца потока; последующие вызовы операции инкремента игнорируются, а в результате вызова операции >* всегда возвращается значение последнего прочитанного из потока элемента (если же с итератором был связан пустой поток, то результат операции >* не определен, хотя и не приводит к аварийному завершению программы).
Для итератора потоковой записи ostream_iterator также определены два конструктора: первый конструктор содержит единственный параметр stream, задающий поток вывода, а второй конструктор дополнительно к параметру stream содержит второй параметр delim, задающий разделитель, который добавляется в поток вывода после каждого выведенного элемента (если параметр delim не указан, то между выводимыми элементами никакой разделитель не добавляется).
Ниже перечислены свойства потоковых итераторов записи:
• специальный конструктор для создания итератора конца потока вывода не предусмотрен;
• операции >* и ++ не выполняют никаких действий и просто возвращают сам итератор;
• операция присваивания p = выражение (где p – имя итератора записи) записывает значение выражения в поток вывода.