我想将存储在未分类矢量中的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) );
}
我希望意图明确。
更新:my algorithm不允许就地排序。如果今天有人感觉很好(我没有问,请参阅上面的问题),请随意为这种情况实施并告诉我。我真的需要“按移动排序”。而且我真的不明白为什么移动会 更加昂贵。
答案 0 :(得分:16)
你的代码对我来说基本上是正确的,除了它似乎就像你打算从未分类的向量中删除被移动的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
中,如果不需要,则必须明确删除。