C++ 将唯一的_ptr从一个向量移动到另一个向量
我想将存储在未排序向量中的唯一的_ptr移动到另一个向量,该向量将包含指针的排序向量 当然,移动唯一的_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_
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:我没有在这里编写算法,因为它与我在这里尝试做的事情无关。我给出的示例代码是算法的一部分(在链接的最后一个代码块中,此答案中的推回
和擦除
将替换最后两行(追加
和删除
调用))