【发布时间】:2017-02-25 22:48:51
【问题描述】:
我正在尝试在指定点将向量 (s1) 的元素插入到不同的向量 (s2) 中。例如,这是通过程序实现的
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
vector<string> s1;
s1.push_back("Hi");
s1.push_back("there!");
vector<string> s2;
s2.push_back("How");
s2.push_back("are");
s2.push_back("you?");
vector<string>::iterator it = s2.begin();
s2.insert(it, s1.begin(), s1.end());
return 0;
}
但是,如果我希望插入命令返回第一个插入元素的迭代器,我的印象是这个命令应该可以工作
it = s2.insert(it, s1.begin(), s1.end());
但是我收到编译错误
vector_insert.cc:20:8: error: no match for ‘operator=’ (operand types are ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’ and ‘void’)
it = s2.insert(it, s1.begin(), s1.end());
为什么当此页面指示迭代器返回 (http://en.cppreference.com/w/cpp/container/vector/insert) 时,编译器会认为 insert 具有 void 返回。请注意,此示例很简单,因为我可以使用
将迭代器获取到初始插入的元素it = s2.begin();
但一般情况下并非如此
【问题讨论】: