Допустим, у меня есть два вектора, src
и dst
, и я хочу добавить src
в конец dst
.
Я заметил, что большинство ответов по этой задаче рекомендуют следующее:
dst.insert(dst.end(),
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.end()));
Через это:
dst.insert(dst.end(), src.begin(), src.end());
Насколько мне известно, вставка (вставка) элементов в вектор требует выделения пространства для вставленных элементов в конце вектора в обоих случаях, чтобы обеспечить непрерывность памяти, и я предполагаю, что стоимость copy
и move
одинакова в Это дело.
Перемещение объектов сделает их мгновенно разрушаемыми, это единственное преимущество от этого, или есть что-то еще, что мне не хватает?
edit: Можете ли вы объяснить это в этих двух случаях:
- Векторы содержат простые данные, например int.
- Векторы содержат объекты класса.
src
после вставки. В обоих случаях вы выделите память для вектора, но первая версия будет перемещать элементы, а вторая - копировать их, и перемещение дешевле, чем копирование - если ваши элементы большой (например, векторы), это будет иметь огромное значение. - person Holt   schedule 28.11.2016string
, вам нужно будет выделитьn
ячеек в обоих случаях, но если вы переместитесь, вы скопируете толькоchar*
иint
(предположим базовую реализацию), тогда как при копировании вам нужно будет повторно выделить новыйchar
массив и скопируйте содержимое для каждой изn
строк. - person Holt   schedule 28.11.2016