2017-01-16 11 views
11

をコピーせずに、私は、データをコピーせずにfooの最後にbarを移動する必要がありますどのように移動アイテム

std::list<std::vector<float>> foo; 
std::vector<float> bar; 

を考えると?

これは問題ありませんか?

foo.emplace_back(std::move(bar)); 

答えて

6

これは問題ありませんか?

foo.emplace_back(std::move(bar));

はい、ので:

  1. std::move(bar)右辺値参照barをキャスト。

  2. std::list::emplace_backは、任意の数のforwarding referencesをとり、最後に要素を構成するために使用します。

  3. std::vector::vector任意のコピーを行うことなく、RHSベクトルの内容を移動右辺値参照を、かかる過負荷(6)を有しています。

5

はい、Qのコードは確かにOKです。でもOKでしょうpush_backを使用して:

foo.push_back(std::move(bar)); 
+4

個人的には、この場合は「push_back」が望ましいと思います。私はそれがはっきりしていると思う。 –

4

がどのようにデータをコピーせずfooの最後にbarを移動する必要がありますか?これがOKで

foo.push_back(std::move(bar)); 

std::vectorの移動のコンストラクタを使用していますか?同様にOKです

foo.emplace_back(std::move(bar)); 

関連する問題