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 が最初に移動セマンティクスを導入した理由の 1 つであり、ユーザーが明示的にオブジェクトをパラメーターなどに移動できるようにするためです。

したがって、左辺値オブジェクトを右辺値参照に変換するためtestに使用して、適切なコンストラクターを指定して呼び出す必要があります。std::movevector

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 に答える