将 unique_ptr 从一个向量移动到另一个向量
我想将存储在未排序向量中的 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) );
}
我希望意图很明确。
更新:我的算法不允许排序就地。如果有人今天感觉不错(我不是在问,请参阅上面的问题),请随意针对这种情况实施它并向我展示。我真的需要“按移动排序”。而且我真的不明白为什么搬家会贵很多。
I'd like to move the unique_ptr's stored in an unsorted vector of them to another vector, that will contain the sorted vector of pointers.
Surely moving a unique_ptr will not automatically erase the element in the first vector? How can I do this?
Example of what I want to do:
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) );
}
I hope the intent is clear.
UPDATE: my algorithm does not allow sorting in-place. If anyone is feeling nice today (I am not asking, see above for my question), feel free to implement it for this situation and show me. I really need the "sort by move". And I don't really see why the moving would be that much more expensive.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的代码对我来说基本上是正确的,除了它似乎就像你打算从未排序的向量中删除移动的
unique_ptr
:在移动
it之后
指的是从unique_ptr
和*it == nullptr
移出的。它仍然存在于unsorted
中,如果不需要,则必须显式删除。Your code looks basically correct to me, except that it seems like you intend for the moved-from
unique_ptr
to be erased from the unsorted vector:After the move
it
refers to a moved-fromunique_ptr
and*it == nullptr
. It still exists inunsorted
and if that is not desired, must be explicitly erased.