Перемещение unique_ptrs из одного вектора в другой
Я хотел бы переместить 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) );
}
Надеюсь, что цель понятна.
UPDATE: мой алгоритм не позволяет сортировать на месте. Если сегодня кто-то чувствует себя хорошо (я не спрашиваю, см. Выше для моего вопроса), не стесняйтесь реализовывать его для этой ситуации и показывать мне. Мне действительно нужно "сортировать по ходу". И я действительно не понимаю, почему движение будет намного дороже.
Ответы
Ответ 1
Ваш код выглядит в основном правильным для меня, за исключением того, что кажется, что вы намерены удалить из 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) );
unsorted.erase(it);
}
После перемещения it
относится к перемещенному от unique_ptr
и *it == nullptr
. Он все еще существует в unsorted
, и если это нежелательно, он должен быть явно удален.