簡體   English   中英

將項目移動到列表而不復制

[英]Move item to a list without copying

特定

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

如何在不復制數據的情況下將bar移動到foo的末尾?

這個可以嗎?

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

這個可以嗎?

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

是的,因為:

  1. std::move(bar)bar轉換為右值引用

  2. std::list::emplace_back接受任意數量的轉發引用,並使用它們在最后構造一個元素。

  3. std::vector::vector有一個重載(6) ,它接受一個右值引用 ,它移動rhs向量的內容而不執行任何副本。

是的,Q中的代碼當然可以。 即使使用push_back也沒關系:

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

如何在不復制數據的情況下將bar移動到foo的末尾?

使用std::vector的move構造函數:

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

這個可以嗎?

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

那也沒關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM