Глава 18. Классы-контейнеры_________________,___________________465
Для итератора в<?о<3д разрешено только чтение, и перемещение только в направлении вперед (т. е. операция декремента не определена). Для итератора вывода — только запись, перемещение только вперед. Эти итераторы являются итераторами с наибольшими ограничениями. С помощью итераторов ввода-вывода каждое положение в контейнере может быть разыменовано только один раз и только для извлечения (ввод) или сохранения (вывод) объектов контейнера (Не запутайтесь. По аналогии с потоковым вводом-выводом, под вводом понимается ввод информации из контейнера, а под выводом — вывод информации в контейнер, — прим. перев.).
STL определяет специальные классы итераторов ввода и вывода, которые работают со входным и выходным потоками C++: istream_iterator и
ostreamJ-terator. ЕСЛИ определен объект типа istream_iterator ИЛИ
ostream_iterator, то передаются два шаблона-аргумента: один — типа container element И второй — типа distance.'.Элемент типа distance определяет расстояние между двумя элементами в массиве, при этом почти всегда используется стандартный тип ptrdiff_t. Для объекта типа istream_ iterator аргументом конструктора является входной поток, для ostrearn iterator — выходной поток и необязательный второй аргумент. Вторым аргументом для конструктора ostream_iterat!-Jr является разделитель считываемых значений.
#defin& RKSTD_NO_NAMESPACE ft include <cstring.h>
#include <iostream.h>
#include <fstream.h>
#include <iterator.h>
#include <algorith.h> ft include <list.h> ttinclude "students.h"
int main() {
// Запись текста в созданный файл и открытие файла для чтения
ofstream outFile("streamit.txt") ;
outFile « "Это тест istream_iterator и ostream_iterator.'' « endl;
out File.close I);
ifstream ir.File ("streamit.txt") ;
// Создание итератора ввода для файла и специального , // итератора ввода для проверки условия конца файла istream iterators-string, ptrdiff t> in(inFile), eof;
// Создание итератора вывода связанного с консолью.
// Отделение каждого вводимого с консоли значения новой строкой
ostrearit_iterator<string> out(cout, "\n");