1

ベクトルのベクトルであるメンバーを持つクラスがあります。単一ベクトルへの右辺値参照を引数として取り、それをベクトル引数の単一要素ベクトルとしてメンバ ベクトルに移動する、このクラスのコンストラクタを作成したいと思います。これまでのところ、私は持っています:

class AClass
{
    std::vector<std::vector<int>> member;

public:

    AClass(std::vector<int> &&vec) : member(1) 
    {
        member[0] = std::vector<int>(std::move(vec));
    }
}

これは正しく動作しているように見えますが、std::moveアラウンドvecが必要かどうかはわかりません。または、std::vector私が少し違った方法で書いていれば、私のためにこれの多くを処理していたでしょう.

4

2 に答える 2

5

書くのは短くする必要があります:

member[0] = std::move(vec);

呼び出すために

vector<T,Allocator>& operator=(vector<T,Allocator>&& x);

私の知る限り、vecは右辺値ではないため、明示的な移動が必要です (名前付き変数であり、 の左側で使用できますoperator=)。

于 2011-09-27T11:31:46.593 に答える
0

これを行う方法は、値をコンストラクターに値で渡し、それを必要な場所に移動することです。そう

AClass(std::vector<int> vec)
{
    member.emplace_back(std::move(vec));
}

値がコピー構築されているかどうか、または右辺値であったためにコンストラクターに移動できたかどうかなどを気にする必要はありません。関数定義で、アイテムの独自のコピーを取得するように要求するだけで、言語は可能な限りそれを提供します。

于 2011-09-27T11:41:34.073 に答える