C++ 将唯一的_ptr从一个向量移动到另一个向量

C++ 将唯一的_ptr从一个向量移动到另一个向量,c++,c++11,move-semantics,unique-ptr,C++,C++11,Move Semantics,Unique Ptr,我想将存储在未排序向量中的唯一的_ptr移动到另一个向量,该向量将包含指针的排序向量 当然,移动唯一的_ptr不会自动删除第一个向量中的元素?我该怎么做 我想做的示例: std::vector<std::unique_ptr<T> > unsorted, sorted; // fill the "unsorted" vector while( unsorted.size() > 0 ) { const auto it = find_next_element_

我想将存储在未排序向量中的唯一的_ptr移动到另一个向量,该向量将包含指针的排序向量

当然,移动唯一的_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) );
}
std::未排序的向量,已排序;
//填充“未排序”向量
while(unsorted.size()>0)
{
const auto it=find_next_element_to_add_to_sorted(未排序);
已排序。推回(std::move(*it));
}
我希望意图是明确的


更新:不允许就地排序。如果今天有人感觉很好(我不是在问,我的问题见上文),请随意在这种情况下实施它并向我展示。我真的需要“移动排序”。我真的不明白为什么移动会那么昂贵。

我觉得您的代码基本上是正确的,只是您似乎打算从未排序的向量中删除从
唯一移动的\u 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);
}
std::未排序的向量,已排序;
//填充“未排序”向量
while(unsorted.size()>0)
{
const auto it=find_next_element_to_add_to_sorted(未排序);
已排序。推回(std::move(*it));
取消排序。删除(它);
}

移动
后,它
指的是从
unique\u ptr
*移动的一个对象,它==nullptr
。它仍然存在于未排序的
中,如果不需要,则必须显式删除。

谢谢!移动
的“内容”是什么?您的解决方案看起来很好,很干净,这正是我想要的,但在
移动
操作之后,我对
感到困惑。(完全脱离主题:等不及libc++在Windows上运行了!)在我看来,
It
是向量的迭代器,因为您使用它的方式。如果是这样,
指的是一个唯一的ptr。在移动之后,这个唯一的ptr将等于nullptr。是的,好的。我不知道这一点。虽然OP代码中列出的算法似乎与链接文章中的算法不一样,但这似乎会起到作用。Mark B:我没有在这里编写算法,因为它与我在这里尝试做的事情无关。我给出的示例代码是算法的一部分(在链接的最后一个代码块中,此答案中的
推回
擦除
将替换最后两行(追加
删除
调用))