我目前正在阅读有关 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 ?
最佳答案
迭代器是根据指针建模的;这包括输出迭代器。当您将数据复制到指针指向的区域时,您会取消引用该指针,进行赋值,然后递增该指针。您对迭代器执行相同的操作,包括输出品种 *的迭代器。
习惯上将增量与赋值结合起来,如下所示:
*myItr++ = 137; // Prints 137 to cout
*myItr++ = 42; // Prints 42 to cout
当迭代器需要分配和递增时,您可以混合和匹配需要它们的迭代器和算法。例如,您可以通过调用 std::copy 来执行容器的打印 - 您可以使用相同的算法将一个容器复制到另一个容器、将容器复制到数组或从容器填充容器数组。
* 值得注意的是,
++
的两个重载对于 ostream_iterator
没有任何作用。包含它们是为了满足 OutputIterator
的要求。请参阅this link了解更多详情。
关于c++ - 为什么我们在这里增加 ostream 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17914750/