在我的代码中,我具有以下内容:
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/