ДанногоПереместить элемент в список без копирования
std::list<std::vector<float>> foo;
std::vector<float> bar;
Как я должен двигаться bar
до конца foo
без копирования данных?
Это нормально?
foo.emplace_back(std::move(bar));
ДанногоПереместить элемент в список без копирования
std::list<std::vector<float>> foo;
std::vector<float> bar;
Как я должен двигаться bar
до конца foo
без копирования данных?
Это нормально?
foo.emplace_back(std::move(bar));
Это нормально?
foo.emplace_back(std::move(bar));
Да, потому что:
std::move(bar)
бросает bar
к ссылке RValue.
std::list::emplace_back
принимает любое количество forwarding references и использует их для построения элемента в конце.
std::vector::vector
имеет перегрузку (6) который принимает ссылку RValue, который перемещает содержимое RHS вектор без выполнения какой-либо копии.
Да, код в Q, безусловно, в порядке. Даже при использовании push_back
будет хорошо:
foo.push_back(std::move(bar));
Как я должен двигаться
bar
до концаfoo
без копирования данных?
Использование перемещения конструктора std::vector
:
foo.push_back(std::move(bar));
ли это нормально?
foo.emplace_back(std::move(bar));
Это нормально, как хорошо.
Лично я считаю, что 'push_back' должен быть предпочтительным в этом случае. Я думаю, что это яснее. –