кроме того, вторым аргумен­том конструктора класса ostream jterator не обязана быть строка, состоя­щая лишь из пробелов, что демонстрирует следующая программа:

//  outiter.cpp:   Потоковый итератор вывода;   запись в файл //                           с помощью операции присваивания,

iinclude <iostream> iinclude <vector> iinclude <iterator> using namespace std;

int main() {

ostream_iterator<int> ifcout, "abc\n");

*i++ = 123;

*i++ = 456;

cout « endl;

return 0; }

Эта программа выведет:

123abc 456abc

Поскольку здесь из всей STL мы используем только шаблон ostreamiterator, программа будет работать, если напишем ^include <iterator> вместо ^include <vector>.

С вводом дела обстоят несколько сложнее, потому что требуется обна­ружить конец входного потока. Вспомним обсуждение конца файла в разделе 1.9. Ниже приведено нетривиальное решение задачи, которая заключается в том, чтобы прочитать все числа из файла num.txt, содержа­щего только целые числа в обычном формате.

// initer.cpp: Потоковый итератор ввода; чтение файла

//                        с помощью операторов присваивания.

iinclude <iostream>

iinclude <fstream>

iinclude <vector>

iinclude <iterator>

using namespace std;

int main()

{ ifstream file("num.txt"); if (file)

{ istream_iterator<int> i(file), eof; int x;

while (i != eof) { x = *i++;

cout << x « " ";

} } else cout << "Cannot open file num.txt."; cout << endl; return 0; }

Например, если файл num.txt содержит две строчки

10 20 30

программа выведет на экран:

10  20  30


<< назад вперед >>