我一直在研究 ostream 和 istream 迭代器,并且想知道它们在实际应用中有多少使用。我看了几本书和许多网页,但内容都是同一个简单示例的变体,例如:
ostream_iterator<int> out_it (cout,", ");
copy(myvector.begin(), myvector.end(), out_it);
这些流迭代器是否可以用于真实文件和二进制数据,并且通常会这样做吗?
我一直在研究 ostream 和 istream 迭代器,并且想知道它们在实际应用中有多少使用。我看了几本书和许多网页,但内容都是同一个简单示例的变体,例如:
ostream_iterator<int> out_it (cout,", ");
copy(myvector.begin(), myvector.end(), out_it);
这要看情况。除了快速测试以外,我并不认为它们非常有用:输入流迭代器无法轻松读取文件的一部分,输出迭代器添加终止符而不是插入分隔符。但很多事情都取决于情况;如果你在一个环境中工作,那里有很多只是数字列表的文件,它们可能是合适的;也有一些情况下终止符是合适的。
这要看情况。如果你正在编写类似于Unix风格的过滤器,它们可以非常好地工作。否则,它们就不那么有用了。
使它们更有用的一个补充(至少在我的经验中)是一个infix_iterator
,它只在元素之间插入指定的分隔符,而不是在每个元素之后插入。从技术上讲,在那一点上你不再使用ostream_iterator
,但它足够接近,大多数其他代码不需要关心差异。
fstream家族继承自istream/ostream,因此可以实现。
ofstream outFile("myfile");
//..............
ostream_iterator<data> dataIterOut(outFile);
data d(...);
*dataIterOut = d; //meh. little work saved, short on clarity