Итератор istream_iterator
В общем виде объявление потокового итератора чтения istream_iterator
имеет форму:
istream_iterator<Type> identifier( istream& );1[O.A.3].
где 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() )); |