使用std :: move

时间:2011-10-11 23:34:29

标签: c++ c++11

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::movev移至Objects以避免深层复制开销而非swap? 我知道这里有很多解决方法,比如多数组或直接插入Objects.back(),但我需要一个使用std::move来理解它的例子。

2 个答案:

答案 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));
}