2011-05-20 3 views
4

Я искал итераторы ostream и istream и задавался вопросом, насколько они используются в реальном мире. Я посмотрел на пару книг и много веб-страниц и всегда все вариации одного и того же, например, какИспользование потоковых итераторов?

ostream_iterator<int> out_it (cout,", "); 
    copy(myvector.begin(), myvector.end(), out_it); 

Могут ли эти потоковые итераторы быть использованы с реальными файлами и двоичных данных и, что обычно делается?

ответ

0

Ну, семейство fstream наследуется от istream/ostream, поэтому это можно сделать.

ofstream outFile("myfile"); 

//.............. 

ostream_iterator<data> dataIterOut(outFile); 

Вопрос о том, насколько распространен он более интересен. По моему опыту, не очень. Привлекательной мотивацией было бы использовать стандартные алгоритмы (или некоторые из ваших собственных решений). Но так как структура/класс, который вы хотите читать/писать, должна иметь всю необходимую инфраструктуру (ctors, stream operator и т. Д.) Уже на месте, я думаю, большинство людей вообще не видит смысла. НАПРИМЕР.

data d(...); 

*dataIterOut = d; //meh. little work saved, short on clarity 
1

Это зависит. Я не нахожу их полезными, за исключением быстрых тестов : итераторы входного потока не могут легко прочитать только часть файла , а выходные итераторы добавляют терминатор, а не , вставляя разделитель. Но многое зависит; если вы работаете в среде, в которой есть много файлов, которые всего лишь списки номеров, они могут быть подходящими; и имеются случаи , где термины являются подходящими.

1

Это зависит от цели. Если вы пишете что-то по порядку фильтра в стиле Unix, они могут работать очень хорошо. В противном случае они не так полезны.

Одно дополнение, которое делает их гораздо более полезными (по крайней мере, IME), является infix_iterator, которое вставляет только указанный разделитель между элементами, а не после каждого. Технически вы больше не используете ostream_iterator в этот момент, но это достаточно близко, что большая часть остального кода не нуждается в заботе об этой разнице.

Смежные вопросы