给出
std::list<std::vector<float>> foo;
std::vector<float> bar;
如何在不复制数据的情况下将bar
移至foo
的末尾?
这可以吗?
foo.emplace_back(std::move(bar));
答案 0 :(得分:6)
这可以吗?
foo.emplace_back(std::move(bar));
是的,因为:
std::move(bar)
将bar
投射到右值参考。
std::list::emplace_back
接受任意数量的forwarding references并使用它们在结尾处构建元素。
std::vector::vector
有一个重载(6),它带有右值引用,它会移动 rhs 矢量而不执行任何复制。
答案 1 :(得分:5)
是的,Q中的代码当然可以。即使使用push_back
也没关系:
foo.push_back(std::move(bar));
答案 2 :(得分:4)
如何在不复制数据的情况下将
bar
移至foo
的末尾?
使用std::vector
的移动构造函数:
foo.push_back(std::move(bar));
这可以吗?
foo.emplace_back(std::move(bar));
也没关系。