C++拼接vector报错:std::vector<int>调用无匹配重载
解决C++中vector拼接的错误问题
嘿,我来帮你捋清楚这个问题~你遇到的错误核心是把已存在的vector对象当成函数来调用了,这在C++里是不允许的,咱们一步步拆解:
错误原因分析
你写的代码:
sequence(sequence.begin() + i, sequence.end());
这里的sequence是一个已经创建好的std::vector<int>对象,你试图用构造函数的语法去“修改”它,但C++里构造函数只能用来创建新对象,不能直接对现有对象这么操作。编译器会把这段代码解析成“调用名为sequence的函数”,但显然不存在这样的函数,所以才会报no match for call to ‘(std::vector<int>) (...)’的错误。
正确的实现方式
根据你的需求,分两种场景给出正确写法:
场景1:把vector从第i个元素开始的部分,追加到自身末尾(拼接自身的子序列)
用vector的insert成员函数,这是修改现有vector的正确方式:
// 在sequence的末尾插入从begin()+i到end()的所有元素 sequence.insert(sequence.end(), sequence.begin() + i, sequence.end());
场景2:创建一个新的vector,包含原vector从第i个元素到末尾的内容
如果是要生成新的vector对象,就用构造函数创建新变量:
// 构造新的vector,范围是原sequence的begin()+i到end() std::vector<int> new_sequence(sequence.begin() + i, sequence.end());
额外提醒
如果你的需求是拼接两个不同的vector,同样可以用insert方法,比如把另一个vectorother_seq的内容追加到sequence末尾:
sequence.insert(sequence.end(), other_seq.begin(), other_seq.end());
内容的提问来源于stack exchange,提问作者Rory Danes
相关产品推荐
相关产品推荐

