|
Итераторы для потока pt
Начиная с версии 4.15 электронного задачника Programming Taskbook,
для ввода и вывода элементов последовательностей типа T при выполнении учебных заданий
можно использовать специализированные итераторы ptin_iterator<T> и ptout_iterator<T>
соответственно. Эти итераторы обладают теми же свойствами, что и
стандартные потоковые итераторы istream_iterator<T> и ostream_iterator<T> .
Перечислим свойства итератора чтения, совпадающие с аналогичными свойствами потоковых итераторов:
- тип T определяет тип элементов последовательности;
- чтение элемента последовательности из потока pt выполняется в начальный момент работы с итератором,
а затем при каждой операции инкремента ++;
- имеются два варианта операции ++: префиксный инкремент (++i) и постфиксный инкремент (i++);
- операция * возвращает последнее прочитанное значение, причем эту операцию можно использовать неоднократно
для получения того же самого значения;
- итератор конца последовательности создается с помощью конструктора без параметров;
- при достижении конца последовательности итератор становится равным итератору конца последовательности,
последующие вызовы операции инкремента игнорируются, а в результате вызова операции * всегда возвращается
значение последнего прочитанного элемента последовательности.
Свойства итератора записи, совпадающие с аналогичными свойствами потоковых итераторов:
- специальный конструктор для создания итератора конца последовательности не предусмотрен;
- операции * и ++ не выполняют никаких действий и просто возвращают сам итератор;
- операция присваивания вида o = выражение (где o - имя итератора записи) записывает значение
выражения в поток pt.
В отличие от стандартного потокового итератора istream_iterator, конструктор для итератора ptin_iterator
(за исключением конструктора итератора конца последовательности) имеет один параметр типа unsigned int,
определяющий размер считываемой последовательности (в элементах). В случае особого значения параметра,
равного 0, размер последовательности считывается из самого потока pt непосредственно перед считыванием
первого элемента последовательности. Если при считывании размера оказывается, что прочитанный элемент
данных не является целым числом или это число не является положительным, то итератор сразу переходит
в состояние конца последовательности (т. е. становится равным итератору ptin_iterator<T>() ).
Подобная организация итераторов чтения ptin_iterator<T> позволяет легко реализовывать
с их помощью считывание из потока ввода pt нескольких последовательностей, если заранее известен
их размер или если размер указывается непосредственно перед началом последовательности.
Итераторы ptin_iterator<T> и ptout_iterator<T>
используются во многих программах-заготовках, связанных с заданиями, включенными в электронный задачник
Programming Taskbook for STL.
|