我一直在关注ostream和istream迭代器,并想知道它们在现实世界中的使用量。我看了几本书和很多网页,而且一切都是同一个例子的变体,比如
ostream_iterator<int> out_it (cout,", ");
copy(myvector.begin(), myvector.end(), out_it);
这些流迭代器可以与真实文件和二进制数据一起使用吗?通常是这样做的吗?
答案 0 :(得分:1)
这取决于。除了快速,我发现它们并没有那么有用 测试:输入流迭代器不能轻易读取部分内容 一个文件,输出迭代器附加一个终结符,而不是 插入分隔符。但很大程度上取决于;如果你在工作 一个只有很多文件的环境 数字清单,它们可能是合适的;并且有案例 终结者是合适的。
答案 1 :(得分:1)
这取决于。如果你按照Unix风格的过滤器的顺序写一些东西,它们可以很好地工作。否则,它们几乎没用。
使它们更有用(至少是IME)的一个补充是infix_iterator
,它只在元素之间而不是在每个元素之后插入指定的分隔符。从技术上讲,你不再使用ostream_iterator
,但它足够接近,其余大部分代码都不需要关心差异。
答案 2 :(得分:0)
fstream系列继承自istream / ostream,因此可以完成。
ofstream outFile("myfile");
//..............
ostream_iterator<data> dataIterOut(outFile);
它有多普遍的问题更有趣。根据我的经验,不是很好。令人信服的动机是利用标准算法(或您自己制作的一些算法)。但是,由于你想要读/写的结构/类需要已经拥有所有必要的基础设施(ctors,流操作符等),我想大多数人都没有看到这一点。 E.G。
data d(...);
*dataIterOut = d; //meh. little work saved, short on clarity