如何使用std :: swap将向量复制到结构中的向量?以下是我要做的事情的一个例子
#include<vector>
using namespace std;
struct test{
vector<int> a;
vector<int> b;
};
int main(){
int data[] = { 1, 2, 3 };
int data2[] = {3,4,5 };
std::vector<int> c( &data[0], &data[0]+sizeof(data)/sizeof(data[0]));
std::vector<int> d( &data2[0], &data2[0]+sizeof(data2)/sizeof(data2[0]));
test A = test(swap(c) , swap(d) );
}
答案 0 :(得分:3)
您无法交换构造函数或函数参数。你只能换成左值。这是C ++ 11引入移动语义的原因之一:允许用户明确地将对象移动到参数中等等。
所以你需要给test
一个合适的构造函数并调用它,使用std::move
将你的左值vector
对象转换为右值引用。
struct test{
test(vector<int> _a, vector<int> _b) : a(std::move(_a)), b(std::move(_b)) {}
vector<int> a;
vector<int> b;
};
...
test A{std::move(c), std::move(d)};
如果你真的想要复制这些向量,你可以这样做:
test A{c, d};