"move" two vectors together

c++, c++11, deque, move-semantics, vector

Solution

Yes, use `std::move`:

#include <algorithm>
std::move(b.begin(), b.end(), std::back_inserter(a));

Alternatively, you can use move iterators:

a.insert(a.end(),
         std::make_move_iterator(b.begin()), std::make_move_iterator(b.end()));

Remember to `#include <iterator>` in both cases, and before you begin, say:

a.reserve(a.size() + b.size());

Depending on the cost of value-initialization compared to checking and incrementing the size counter, the following variant may also be interesting:

std::size_t n = a.size();
a.resize(a.size() + b.size());
std::move(b.begin(), b.end(), a.begin() + n);

Problem

If I have two vectors and want to combine them to one, I can do it the following way: ``` std::vector<T> a(100); // just some random size here std::vector<T> b(100); a.insert(std::end(a), std::begin(b), std::end(b)); ``` That involves copying though, which I want to avoid. Is there any way to use move-semantics to get them together? I highly doubt it, as a `vector` is supposed to be contiguous. However is there any way to do it with a `deque`?

Original source