我从http://en.cppreference.com/w/cpp/iterator/ostream_iterator/ostream_iterator找到了这段代码:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
std::ostream_iterator<int> i1(std::cout, ", ");
std::fill_n(i1, 5, -1);
std::ostream_iterator<double> i2(std::cout);
*i2++ = 3.14;
}
为什么需要++
中的*i2++ = 3.14;
?
答案 0 :(得分:2)
从概念上讲,在写入范围时,您希望在写入一个范围后移动到下一个元素。对于大多数迭代器,例如一个std::vector::iterator
,必须明确地完成。所以包含它是有意义的,只是为了保持一致性。
在std::ostream_iterator
的特定情况下,它虽然没有实际效果,但可以省略。你无法覆盖&#34;元素&#34;无论如何,推进是隐式的(并且只是隐式的,即增量运算符和derefencing在这种情况下都是无操作)。
重要部分仅是operator =
,如相关文档中所述:
#include <iostream> #include <iterator> int main() { std::ostream_iterator<int> i1(std::cout, ", "); *i1++ = 1; // usual form, used by standard algorithms *++i1 = 2; i1 = 3; // neither * nor ++ are necessary std::ostream_iterator<double> i2(std::cout); i2 = 3.14; }
答案 1 :(得分:1)
++
运算符对std::ostream_iterator
没有影响。分配给*i2
会自动推进输出流。
提供它是为了ostream_iterator
可以在允许普通迭代器的任何地方使用,并且大多数迭代器必须显式增加。
即使使用普通的迭代器,如果多次使用它,通常也只需要增加它。在您找到的代码段中,只使用一次,增量完全没必要。如果它在一个循环中会更合理。