将unique_ptrs从一个向量移动到另一个向量

rub*_*nvb 18 c++ unique-ptr move-semantics c++11

我想将存储在未分类矢量中的unique_ptr移动到另一个矢量,该矢量将包含指针的排序矢量.

肯定移动unique_ptr不会自动擦除第一个向量中的元素?我怎样才能做到这一点?

我想做的例子:

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
}
Run Code Online (Sandbox Code Playgroud)

我希望意图清楚.

更新:我的算法不允许就地排序.如果今天有人感觉很好(我没有问,请参阅上面的问题),请随意为这种情况实施并告诉我.我真的需要"按移动排序".我真的不明白为什么移动会昂贵得多.

How*_*ant 19

你的代码对我来说基本上是正确的,除了你似乎打算unique_ptr从未分类的向量中删除move -from :

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
    unsorted.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

移动后it指的是移动unique_ptr和移动*it == nullptr.它仍然存在,unsorted如果不需要,必须明确删除.