c++ - 为什么我们在这里增加 ostream 迭代器

标签 c++ iterator

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

相关文章:

java - 在 Java 中过滤列表,同时避免 o(n) 复杂度中的 ConcurrentModificationException

c++ - 处理从 std::istream 中提取字符串的空字符串情况

C++ if/else语句问题

c++ - 如何将 MATLAB Lab 色标转换为 OpenCV Lab 色标?

c++ - 如何为合成数据创建迭代器?

c++ - 为什么这个 vector 迭代器不能递增?

c++ - 将函数传递给可变函数模板

c++ - 创建指针列表的正确范例是什么?

java - 如何修复迭代期间添加项目时的 ConcurrentModificationException 错误

c++ - 将 std::ranges 算法与自定义容器和迭代器一起使用