21

我想将存储在它们的未排序向量中的 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) );
}

我希望意图是明确的。

更新我的算法不允许就地排序。如果今天有人感觉很好(我不是在问,我的问题见上文),请随时针对这种情况实施它并向我展示。我真的需要“按动作排序”。而且我真的不明白为什么搬家会得多。

4

1 回答 1

23

您的代码对我来说基本上是正确的,只是您似乎打算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) );
    unsorted.erase(it);
}

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

于 2011-04-26T16:02:37.663 回答