0

如何使用 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) );



}
4

1 回答 1

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};
于 2012-12-02T17:46:04.960 回答