2

我目前正在阅读有关 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 ?

4

2 回答 2

3

迭代器以指针为模型;这包括输出迭代器。当您将数据复制到指针指向的区域时,您取消引用指针,进行赋值,然后递增指针。您对迭代器执行相同的操作,包括输出类型*的这些。

通常将增量与赋值结合起来,如下所示:

*myItr++ = 137; // Prints 137 to cout
*myItr++ = 42; // Prints 42 to cout

当迭代器期望被分配和递增时,您可以混合和匹配期望它们的迭代器和算法。例如,您可以通过调用来执行容器的打印std::copy- 您可以使用该算法将一个容器复制到另一个容器、将容器复制到数组中或从数组中填充容器。


*值得注意的是,这两个重载++都对ostream_iterator. 包括它们是为了满足OutputIterator. 有关更多详细信息,请参阅此链接

于 2013-07-29T01:29:00.143 回答
0

特别是对于 ostream_iterator 类,operator++() 运算符不需要有任何效果,因为流在​​插入 C++ 时会自动前进。 http://www.cplusplus.com/reference/iterator/ostream_iterator/operator++/

于 2013-07-29T01:34:38.450 回答