rub*_*nvb 18 c++ unique-ptr move-semantics c++11
我想将存储在未分类矢量中的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) );
}
Run Code Online (Sandbox Code Playgroud)
我希望意图清楚.
更新:我的算法不允许就地排序.如果今天有人感觉很好(我没有问,请参阅上面的问题),请随意为这种情况实施并告诉我.我真的需要"按移动排序".我真的不明白为什么移动会是昂贵得多.
How*_*ant 19
你的代码对我来说基本上是正确的,除了你似乎打算unique_ptr
从未分类的向量中删除move -from :
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);
}
Run Code Online (Sandbox Code Playgroud)
移动后it
指的是移动unique_ptr
和移动*it == nullptr
.它仍然存在,unsorted
如果不需要,必须明确删除.
归档时间: |
|
查看次数: |
7848 次 |
最近记录: |