С++ для начинающих


Итератор istream_iterator


В общем виде объявление потокового итератора чтения istream_iterator имеет форму:

istream_iterator<Type> identifier( istream& );1.

где Type– это любой встроенный или пользовательский тип класса, для которого определен оператор ввода. Аргументом конструктора может быть объект либо класса istream, например cin, либо производного от него класса с открытым типом наследования – ifstream:

#include <iterator>

#include <fstream>

#include <string>

#include <complex>

// прочитать последовательность объектов типа complex

// из стандартного ввода

istream_iterator< complex > is_complex( cin );

// прочитать последовательность строк из именованного файла

ifstream infile( "C++Primer" );

istream_iterator< string > is_string( infile );

При каждом применении оператора инкремента к объекту типа istream_iterator читается следующий элемент из входного потока, для чего используется оператор operator>>(). Чтобы сделать то же самое в обобщенных алгоритмах, необходимо предоставить пару итераторов, обозначающих начальную и конечную позицию в файле. Начальную позицию дает istream_iterator, инициализированный объектом istream, – такой, скажем, как is_string. Для получения конечной позиции мы используем специальный конструктор по умолчанию класса istream_iterator:

// конструирует итератор end_of_stream, который будет служить маркером

// конца потока в итераторной паре

istream_iterator< string > end_of_stream

vector<string> text;

// правильно: передаем пару итераторов

copy( is_string, end_of_stream,

      inserter( text, text.begin() ));



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