c++ - STL ostream_iterator 写入屏幕,即使我覆盖了它?

标签 c++ stl iterator

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

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,运算符 ++(前缀和后缀)是空操作。它什么都不做,也没有任何区别。

无需手动执行 ++,因为当您通过它输出某些内容时,迭代器总是“前进”。

P.S. 据图书馆Defect Report 485 ,目的是要求赋值和增量交替进行。这个要求显然没有进入标准的当前版本。但在未来的修订中,它会被包括在内。换句话说,正如其他人已经指出的那样,使用输出迭代器的正确方法是交替赋值和递增。

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

相关文章:

python - 以几乎均匀采样的随机顺序迭代长迭代器,而不需要大量内存

c++ - 为什么这段c++找不到结构成员 'filename'?

c++ - 使用 MFC 进行套接字编程

c++ - QT 创建许多复杂的小部件

c++ - 创建一组 1 个元素的最佳\最简单\最快的方法是什么? (C++)

c++ - 如何缩小 std::vector 的大小?

c++ - 函数模板只接受双向迭代器或指针

python - StopIteration 异常是否会自动通过我的迭代器向上传播?

c++ - 在给定键的情况下获取 2D Vector 中的值

c++ - 为什么 std::accumulate 生成 705032704 作为输出而不是 vector 中元素的总和?