在C++11
之前我使用swap-to-back来避免深度复制开销,例如:
vector<vector<Object> > Objects;
for(/* some range */)
{
vector<Object> v;
for(/* some other range */)
{
v.push_back(/* some object */);
}
Objects.push_back(vector<Object>());
Objects.back().swap(v);
}
如何使用std::move
将v
移至Objects
以避免深层复制开销而非swap
?
我知道这里有很多解决方法,比如多数组或直接插入Objects.back()
,但我需要一个使用std::move
来理解它的例子。
答案 0 :(得分:17)
Objects.push_back( std::move( v ) );
答案 1 :(得分:16)
vector<vector<Object> > Objects;
for(/* some range */)
{
vector<Object> v;
for(/* some other range */)
{
v.push_back(/* some object */);
}
Objects.push_back(std::move(v));
}