我目前正在阅读有关ostream迭代器(迭代器适配器)的内容,作者给出了以下示例:
/* Declare an ostream_iterator that writes ints to cout. */
ostream_iterator<int> myItr(cout, " ");
/* Write values to the iterator. These values will be printed to cout. */
*myItr = 137; // Prints 137 to cout
++myItr;
*myItr = 42; // Prints 42 to cout
++myItr
我很好奇为什么这个例子在给它分配值后会运行++ myItr?
答案 0 :(得分:3)
迭代器以指针为模型;这包括输出迭代器。将数据复制到指针指向的区域时,取消引用指针,进行赋值,然后递增指针。您对迭代器执行相同的操作,包括输出变量 * 。
习惯上将增量与赋值相结合,如下所示:
*myItr++ = 137; // Prints 137 to cout
*myItr++ = 42; // Prints 42 to cout
当迭代器期望被分配和递增时,您可以混合并匹配期望它们的迭代器和算法。例如,您可以通过调用std::copy
来执行容器的打印 - 可以使用相同的算法将一个容器复制到另一个容器中,将容器复制到数组中,或者从数组中填充容器。
++
的两个重载都不会对ostream_iterator
起任何作用。包含它们是为了满足OutputIterator
的要求。有关详细信息,请参阅this link。
答案 1 :(得分:0)
特别是对于ostream_iterator类,operator ++()运算符不需要有任何效果,因为在C ++中插入时stream会自动前进。 http://www.cplusplus.com/reference/iterator/ostream_iterator/operator++/