簡體   English   中英

使用std :: move將C ++復制映射到vector

[英]C++ copy map to vector with std::move

我相對來說是C ++的新手,這可能是一個愚蠢的問題,但我現在正試圖理解rValuelValue引用,這一點在我腦海中浮現:

假設我們有一個地圖(來自數據庫或其他),我們想要將它的所有值復制到矢量。

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.

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