Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++ STL迭代器,有一个代码段,它教BuxOntIdTyIsActual:< /P> int main(int argc, const char * argv[]) { vector<int> original; //vector<int> original = {100, 99, 98}; /* Initially empty */ /* Create a back_insert_iterator that inserts values into myVector. */ back_insert_iterator< vector<int> > itr(original); for (int i = 0; i < 10; ++i) { *itr = i + 1; // "Write" to the back_insert_iterator, appending the value. ++itr; } vector<int> destination; reverse_copy(original.begin(), original.end(), back_insert_iterator< vector<int> >(destination)); reverse_copy(original.begin(), original.end(), insert_iterator< vector<int> >(destination)); /* Print the vector contents; this displays 0 1 2 3 4 5 6 7 8 9 */ copy(destination.begin(), destination.end(), ostream_iterator<int>(cout, " ")); cout << endl;_C++ - Fatal编程技术网

插入迭代器与后插入迭代器 我现在正在学习C++ STL迭代器,有一个代码段,它教BuxOntIdTyIsActual:< /P> int main(int argc, const char * argv[]) { vector<int> original; //vector<int> original = {100, 99, 98}; /* Initially empty */ /* Create a back_insert_iterator that inserts values into myVector. */ back_insert_iterator< vector<int> > itr(original); for (int i = 0; i < 10; ++i) { *itr = i + 1; // "Write" to the back_insert_iterator, appending the value. ++itr; } vector<int> destination; reverse_copy(original.begin(), original.end(), back_insert_iterator< vector<int> >(destination)); reverse_copy(original.begin(), original.end(), insert_iterator< vector<int> >(destination)); /* Print the vector contents; this displays 0 1 2 3 4 5 6 7 8 9 */ copy(destination.begin(), destination.end(), ostream_iterator<int>(cout, " ")); cout << endl;

插入迭代器与后插入迭代器 我现在正在学习C++ STL迭代器,有一个代码段,它教BuxOntIdTyIsActual:< /P> int main(int argc, const char * argv[]) { vector<int> original; //vector<int> original = {100, 99, 98}; /* Initially empty */ /* Create a back_insert_iterator that inserts values into myVector. */ back_insert_iterator< vector<int> > itr(original); for (int i = 0; i < 10; ++i) { *itr = i + 1; // "Write" to the back_insert_iterator, appending the value. ++itr; } vector<int> destination; reverse_copy(original.begin(), original.end(), back_insert_iterator< vector<int> >(destination)); reverse_copy(original.begin(), original.end(), insert_iterator< vector<int> >(destination)); /* Print the vector contents; this displays 0 1 2 3 4 5 6 7 8 9 */ copy(destination.begin(), destination.end(), ostream_iterator<int>(cout, " ")); cout << endl;,c++,C++,然后我想将back_insert_迭代器更改为insert_迭代器,看看会发生什么,所以我替换了这行代码: reverse_copy(original.begin(), original.end(), back_insert_iterator< vector<int> >(destination)); 使用以下代码: reverse_copy(original.begin(), original.end(), inse

然后我想将back_insert_迭代器更改为insert_迭代器,看看会发生什么,所以我替换了这行代码:

reverse_copy(original.begin(), original.end(),
             back_insert_iterator< vector<int> >(destination));
使用以下代码:

reverse_copy(original.begin(), original.end(),
             insert_iterator< vector<int> >(destination));
但是,我的IDE报告说,函数样式从“vector”转换为“insert_iterator”时没有匹配的转换


我不明白为什么会发生这种情况,因为我认为insert_iterator应该是back_insert_iterator的父亲一样的迭代器,如果可以应用back_insert_iterator,然后可以类似地应用插入迭代器?

插入迭代器的格式应该指定容器和容器的开始迭代器作为参数,如下所示:reverse\u copyoriginal.begin,original.end, 插入迭代器destination,destination.begin;

迭代器适配器插入\u迭代器只有以下构造函数

insert_iterator(Container& x, typename Container::iterator i);
如您所见,它有两个参数,第二个参数设置容器中插入新元素的位置

所以你必须写作

reverse_copy(original.begin(), original.end(),
             insert_iterator< vector<int> >(destination, destination.end()));
也就是说,它使用容器的insert方法,该方法又有两个参数

与迭代器front_insert_迭代器和back_insert_迭代器相比,其区别在于,对于这两个迭代器适配器,新元素将插入的位置是已知的,而对于迭代器适配器insert_迭代器,您必须自己指定插入的位置。

请参见
insert_iterator<Container>&
operator=(const typename Container::value_type& value);
iter = container->insert(iter, value);
++iter;