在我的代码中,我具有以下内容:

ostream_iterator<double> doubleWriter(cout, " ~ ");
// ...
*doubleWriter = 1.1;
doubleWriter++;
*doubleWriter = 2.2;
*doubleWriter = 3.3; // shouldn't 2.2 be overwritten?
doubleWriter++;
*doubleWriter = 44.2;

cout << endl << endl;


我希望它能输出以下内容:

1.1 ~ 3.3 ~ 44.2 ~


相反,输出是这样的:

1.1 ~ 2.2 ~ 3.3 ~ 44.2 ~


为什么会这样?在我看来,由于我没有增量,所以我覆盖了2.2,并坚持了3.3。增量是可选步骤吗?

最佳答案

对于标准ostream_iterator,运算符++(前缀和后缀)均为空操作。它什么也没做,没有区别。

不需要手动执行++,因为当您通过迭代器输出某些内容时,它总是会“高级”。

附言根据库Defect Report 485,目的是要求分配和增量交替进行。显然,此要求尚未纳入标准的当前版本中。但是在将来的修订中,将包括在内。换句话说,正如其他人已经指出的那样,使用输出迭代器的正确方法是交替分配和递增。

关于c++ - 即使重写,STL ostream_iterator也会写入屏幕?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3049597/

10-12 16:31