12.4.3. Потоковые итераторы

12.4.3. Потоковые итераторы

Стандартная библиотека предоставляет средства для работы потоковых итераторов чтения и записи совместно со стандартными контейнерами и обобщенными алгоритмами. Класс istream_iterator поддерживает итераторные операции с классом istream или одним из производных от него, например ifstream для работы с потоком ввода из файла. Аналогично ostream_iterator поддерживает итераторные операции с классом ostream или одним из производных от него, например ofstream для работы с потоком вывода в файл. Для использования любого из этих итераторов следует включить заголовочный файл

#include iterator

В следующей программе мы пользуемся потоковым итератором чтения для получения из стандартного ввода последовательности целых чисел в вектор, а затем применяем потоковый итератор записи в качестве целевого в обобщенном алгоритме

#include iostream

#include iterator

#include algorithm

#include vector

#include functional

/*

* вход:

* 23 109 45 89 6 34 12 90 34 23 56 23 8 89 23

*

* выход:

* 109 90 89 56 45 34 23 12 8 6

*/

int main()

{

istream_iterator int input( cin );

istream_iterator int end_of_stream;

vectorint vec;

copy ( input, end_of_stream, inserter( vec, vec.begin() ));

sort( vec.begin(), vec.end(), greaterint() );

ostream_iterator int output( cout, " " );

unique_copy( vec.begin(), vec.end(), output );

}

unique_copy():