如何在不复制的情况下将一个向量移动到另一个向量中

How to move one vector into another vector without copying

本文关键字:向量 一个 移动 另一个 复制 情况下      更新时间:2023-10-16

>我在一个作用域内创建了一个大vector<object>,我想将其推送到该作用域之外的向量中而不复制它(因为它非常大(。有没有办法我可以在不像目前那样进行复制的情况下将向量 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));
}

如果我模拟一个班级

如下
struct object
{
object() { std::cout << "default constructn"; }
object(object const&) { std::cout << "copy constructn"; }
object(object&&) { std::cout << "move constructn"; }
};

然后上面的代码片段现在产生输出

default construct
move construct

因此,移动避免了内部副本。