流迭代器的用途是什么?

4

我一直在研究 ostream 和 istream 迭代器,并且想知道它们在实际应用中有多少使用。我看了几本书和许多网页,但内容都是同一个简单示例的变体,例如:

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

这些流迭代器是否可以用于真实文件和二进制数据,并且通常会这样做吗?
3个回答

1

这要看情况。除了快速测试以外,我并不认为它们非常有用:输入流迭代器无法轻松读取文件的一部分,输出迭代器添加终止符而不是插入分隔符。但很多事情都取决于情况;如果你在一个环境中工作,那里有很多只是数字列表的文件,它们可能是合适的;也有一些情况下终止符是合适的。


1

这要看情况。如果你正在编写类似于Unix风格的过滤器,它们可以非常好地工作。否则,它们就不那么有用了。

使它们更有用的一个补充(至少在我的经验中)是一个infix_iterator,它只在元素之间插入指定的分隔符,而不是在每个元素之后插入。从技术上讲,在那一点上你不再使用ostream_iterator,但它足够接近,大多数其他代码不需要关心差异。


0

fstream家族继承自istream/ostream,因此可以实现。

ofstream outFile("myfile");

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

ostream_iterator<data> dataIterOut(outFile);

“它有多常见”这个问题更有趣。根据我的经验,不是很常见。最有说服力的动机是利用标准算法(或自己制作的一些算法)。但由于你想要读/写的结构/类需要已经具备所有必要的基础设施(构造函数、流运算符等),我想大多数人都没有看到其他意义。例如:
 data d(...);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接