【发布时间】:2017-07-03 13:41:05
【问题描述】:
有没有办法使用 C++11 在一个代码行中连接两个 std::vectors,第一个定义在局部变量中,第二个从函数返回:
#include <vector>
#include <iostream>
#include <iterator>
std::vector<int> getNewVector()
{
return {4,5,6};
}
int main(int argc, char** argv)
{
std::vector<int> dest;
std::vector<int> src{1,2,3};
dest = src + getNewVector(); //Error: no operator "+" matches these operands
return 0;
}
编辑: 与 this question 不同,它不使用 C++11,我想知道新的 C++11 标准是否提供了一些有用的功能来帮助我完成任务。 例如,我使用了 + 运算符,即使它不起作用,但只是为了说明我在寻找什么。
【问题讨论】:
-
这不是上述问题的重复。 '+' 运算符对于 std::vector 是未定义的。使用
insert方法完成连接。 IE。dest.insert(dest.end(),src.begin(),src.end()); -
@GavinPortwood
dest.insert(dest.end(),getNewVector().begin(),getNewVector().end());是 UB,因为迭代器getNewVector().begin()和getNewVector().end()不属于同一个容器。 -
@AlgirdasPreidžius 但是你在哪里插入 src ?
-
或者,您可以只定义一个全局
operator+,它将两个标准向量作为输入,而不使用任何派生类。