Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我们要在这里增加ostream迭代器_C++_Iterator - Fatal编程技术网

C++ 为什么我们要在这里增加ostream迭代器

C++ 为什么我们要在这里增加ostream迭代器,c++,iterator,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

我目前正在阅读有关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
/*声明一个ostream\u迭代器,该迭代器将int写入cout*/
ostream_迭代器myItr(cout,“”);
/*将值写入迭代器。这些值将打印到cout*/
*myItr=137;//打印137到cout
++myItr;
*myItr=42;//打印42到cout
++迈特

我很好奇为什么这个例子在给它赋值后不使用++myItr?

迭代器是根据指针建模的;这包括输出迭代器。将数据复制到指针指向的区域时,将取消对指针的引用,进行赋值,然后递增指针。对迭代器也执行相同的操作,包括输出变量*

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

*myItr++ = 137; // Prints 137 to cout
*myItr++ = 42; // Prints 42 to cout
当迭代器需要赋值和递增时,可以混合匹配迭代器和算法。例如,您可以通过调用
std::copy
,执行容器的打印—这与您可以将一个容器复制到另一个容器、将容器复制到数组或从数组填充容器的算法相同。

*值得注意的是,
++
的两个重载对
ostream\u迭代器
没有任何作用。包括它们是为了满足
输出迭代器
的要求。详见

> P>,对于OrthuryIdter类,操作符++()操作符不需要任何效果,因为流在C++中自动插入。

您这样问是因为您碰巧知道,在这种特殊情况下,增量操作实际上是一个不可操作的操作吗?或者您一般不熟悉迭代器,并且这种语法对您来说完全陌生?如果是后者,dasblinkenlight会给出答案。如果是前者,那么这是为了与其他迭代器类型保持一致,其中的操作不是禁止操作的。谢谢你的回答。你能解释一下为什么需要增加指针吗?如果你不知道会发生什么?@MistyD当你确定迭代器是输出类型时,增量是不必要的,因为它是不可操作的。只有当你编写一个需要任何类型迭代器的算法时,增量才是必要的。可能有一些输出迭代器实例的增量是重要的,原始指针就是一个明显的例子,尽管在许多情况下,增量操作与对
ostream\u迭代器
所做的操作不同。