我想将存储在未排序的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) );
}
我希望意图清晰明确。
更新: 我的算法 不允许原地排序。如果今天有人心情好(我并不是在请求,请参见上面的问题),可以为这种情况实现它并向我展示。我真的需要“按移动排序”。我不太明白为什么移动会更加昂贵。
move
操作之后,“it”的“内容”是什么?你的解决方案看起来很好,很干净,也正是我想要的,但是我对move
操作之后的“it”感到困惑。(完全离题:迫不及待地希望libc++在Windows上能够正常运行!) - rubenvbit
是一个指向vector的迭代器。如果是这样的话,it
将会指向一个unique_ptr。移动后,该unique_ptr将会等于nullptr。 - Howard Hinnant