[英]c++ copy constructor vs move constructor for std::vector
[英]C++ copy map to vector with std::move
我相對來說是C ++的新手,這可能是一個愚蠢的問題,但我現在正試圖理解rValue
和lValue
引用,這一點在我腦海中浮現:
假設我們有一個地圖(來自數據庫或其他),我們想要將它的所有值復制到矢量。
void insertItems(std::vector<std::string>& v)
{
std::map<int, std::string> names = loadFromDb();
for (auto& kv : names )
{
v.push_back(std::move(kv.second));
}
}
在這里使用std::move
是正確的嗎? std::string
提供了一個移動構造函數(可能不是用於字符串,但對於較大的對象),移動構造函數比復制構造函數快得多。 我們也知道我們不會在其他地方使用地圖的項目,一旦我們離開該功能它們就會超出范圍。 我的推定是對的嗎?
我不能在我的思想中看到矛盾,但這是一個復雜的話題,我害怕錯過一些東西。 PS:我認為問題名稱不是最好的。 如果你有一個更好的人隨時編輯它。
在這里使用
std::move
是正確的嗎?
如果您確定將來不會訪問移動的值,是的。
您可能還希望使用std::vector::reserve
來預先分配v
所需的空間。
v.reserve(v.size() + names.size());
在這里使用
std::move
是正確的嗎?
是啊。 代碼看起來很好。
在您顯示的情況下,然后移動將沒有問題,因為您稍后將不使用地圖或其值。
如果地圖不是一個值(如果它是一個引用),或者您需要稍后使用它中的值,那么它是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.