簡體   English   中英

如何在不復制的情況下將一個向量移動到另一個向量

[英]How to move one vector into another vector without copying

我在 scope 內部創建了一個大vector<object> ,我想將其推入位於 scope 外部的向量而不復制它(因為它非常大)。 有沒有一種方法可以將向量 v 推入 vvec 而無需像我目前所做的那樣進行復制?

std:vector<std::vector<object>> vvec;
{
    std::vector<object> v;
    v.emplace_back(object());
    vvec.push_back(v);
}

你可以std::move

std::vector<std::vector<object>> vvec;
{
    std::vector<object> v;
    v.emplace_back(object());
    vvec.push_back(std::move(v));
}

如果我模擬 class 如下

struct object
{
    object() { std::cout << "default construct\n"; }
    object(object const&) { std::cout << "copy construct\n"; }
    object(object&&) { std::cout << "move construct\n"; }
};

那么上面的代碼片段現在會生成 output

default construct
move construct

因此,內部副本被移動避免了。

暫無
暫無

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

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