Глава 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 является разделитель считываемых значений.

h04651.jpg

#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");