Let's say that I have two vectors,
dst.insert(dst.end(), src.begin(), src.end());
Indeed, if copying and moving an element costs the same (is in your example with elements of type
int), then there is no difference.
Moving only makes a difference for elements which themselves store their data on the heap, i.e. use allocated memory (for example if the elements are
std::vector<something>). In this case, moving or copying the elements makes a (potentially huge) difference (provided the move constructor and
operator=(value_type&&) are properly implemented/enabled), since a move merely copies the pointer to the allocated memory, while a copy is deep: it allocates new memory and copies all data, including recursive deep copies if applicable.
As to the costs associated with the data stored in
std::vector, there are some costs if the appended elements exceed capacity. In this case, the whole vector will be resized, including moving all its elements. The reason for this is that
std::vector, by specification, stores all its elements in a single array. If appending containers is a frequent operation in your code, you may want to consider other containers, such as