Moving elements from std::vector to another one
How can I move some elements from first vector to second, and the elements will remove from the first?
if I am using std::move
, the elements not removed from first vector.
this is the code I wrote:
move(xSpaces1.begin() + 7, xSpaces1.end(), back_inserter(xSpaces2));
Solution 1:
Resurrecting an old thread, but I am surprised that nobody mentioned std::make_move_iterator
combined with insert
. It has the important performance benefit of preallocating space in the target vector:
v2.insert(v2.end(), std::make_move_iterator(v1.begin() + 7),
std::make_move_iterator(v1.end()));
As others have pointed out, first vector v1
is now in indeterminate state, so use erase
to clear the mess:
v1.erase(v1.begin() + 7, v1.end());
Solution 2:
std::move
and std::copy
operate on elements, not containers. You have to mutate the container separately. For example, to move the first 17 elements of v1
into a new vector v2
:
std::vector<Foo> v1, v2;
// populate v1 with at least 17 elements...
auto it = std::next(v1.begin(), 17);
std::move(v1.begin(), it, std::back_inserter(v2)); // ##
v1.erase(v1.begin(), it);
After line ##
, the first 17 elements of v1
are still there, but they've been "moved-from", so they're in an indeterminate state.