Об’єкт цього класу може використовуватися в якості параметру будь-якого алгоритму, що працює з вихідним ітератором. В прикладі 15.24 ми використаємо його як параметр copy().
//демонстрація ostream_iterator
#include<iostream>
#include<conio>
#include<algorithm>
#include<list>
using namespace std;
int main()
{int arr[]={10,20,30,40,50};
list<int>thelist;
for(int j=0;j<5;j++)
thelist.push_back(arr[j]);//перевести масив у список
ostream_iterator<int>ositer(cout,", ");//ітератор ostream
cout<<"\nVmist spysku:";
copy(thelist.begin(),thelist.end(),ositer);//вивід списку
cout<<endl;
getch();
return 0;
}
Програма 15.24
Ми визначаємо ітератор ostream для читання значень типу int. Двома параметрами конструктора є потік, в який записуватимуться значення, і рядок, що виводитиметься після кожного з них. Значенням потоку звичайно є ім’я файлу або cout, в даному випадку це cout. При записуванні в цей потік може використовуватися рядок-розділювач, що складається з довільних символів. Алгоритм copy() копіює вміст списку в потік cout. Ітератор вихідного потоку використовується в якості його третього аргументу і є іменем об’єкту призначення.
В програмі 15.25 показано, як використовувати цей підхід для запису вмісту контейнера в файл.
//демонстрація роботи ostream_iterator з файлами
#include<fstream>
#include<conio>
#include<algorithm>
#include<list>
using namespace std;
int main()
{
int arr[]={11,21,31,41,51};
list<int>thelist;
for(int j=0;j<5;j++)
thelist.push_back(arr[j]);
ofstream outfile("iter.dat");//створення файлового обєкту
ostream_iterator<int>ositer(outfile," ");//ітератор
//записати список в файл
copy(thelist.begin(),thelist.end(),ositer);
getch();
return 0;
}
Програма 15.25
Необхідно визначити файловий об’єкт класу ofstream та асоціювати його з конкретним файлом (в даному випадку з файлом iter.dat). При записуванні в файл між елементами вставляємо зручні розділювачі.
Виведення результату на екран в цій програмі не використовується, але ми можемо будь-яким текстовим редактором прочитати вміст файлу iter.dat.