In my opinion, your first solution is the best way to go.
vector<>::insert is designed to add element so it’s the most adequate solution.
You could call reserve on the destination vector to reserve some space, but unless you add a lot of vector together, it’s likely that it wont provide much benefits: vector<>::insert know how many elements will be added, you will avoid only one reserve call.
Note: If those were vector of more complex type (ie a custom class, or even std::string), then using std::move could provide you with a nice performance boost, because it would avoid the copy-constructor. For a vector of int however, it won’t give you any benefits.
Note 2: It’s worth mentioning that using std::move will cause your source vector‘s content to be unusable.