【发布时间】:2017-01-16 10:23:56
【问题描述】:
给定
std::list<std::vector<float>> foo;
std::vector<float> bar;
如何在不复制数据的情况下将bar 移动到foo 的末尾?
这样好吗?
foo.emplace_back(std::move(bar));
【问题讨论】:
标签: c++ c++11 move-semantics
给定
std::list<std::vector<float>> foo;
std::vector<float> bar;
如何在不复制数据的情况下将bar 移动到foo 的末尾?
这样好吗?
foo.emplace_back(std::move(bar));
【问题讨论】:
标签: c++ c++11 move-semantics
这样好吗?
foo.emplace_back(std::move(bar));
是的,因为:
std::move(bar) 将bar 强制转换为右值引用。
std::list::emplace_back 接受任意数量的forwarding references 并在末尾使用它们构造一个元素。
std::vector::vector 有一个重载 (6),它采用 rvalue 引用,它移动 rhs 向量的内容不执行任何复制。
【讨论】:
是的,Q 中的代码肯定没问题。即使使用push_back 也可以:
foo.push_back(std::move(bar));
【讨论】:
push_back。我认为它更清楚。
如何在不复制数据的情况下将
bar移动到foo的末尾?
使用std::vector的移动构造函数:
foo.push_back(std::move(bar));
这样好吗?
foo.emplace_back(std::move(bar));
也可以。
【讨论】: