Let v1 be the target vector, v2 needs to be appended to the back of it.
I'm now doing:
v1.reserve(v1.size() + v2.size()); copy(v2.begin(), v2.end(), back_inserter(v1));
Is this the most efficient way? Or can it maybe be done just via copying a chunk of memory? Thanks!
Appending a vector elements to another vector To insert/append a vector's elements to another vector, we use vector::insert() function. Syntax: //inserting elements from other containers vector::insert(iterator position, iterator start_position, iterator end_position);
push_back() function is used to push elements into a vector from the back. The new value is inserted into the vector at the end, after the current last element and the container size is increased by 1. 1.
How to join two Vectors using STL in C++? Given two vectors, join these two vectors using STL in C++. Approach: Joining can be done with the help of set_union() function provided in STL.
the results are directly linked to the allocations that have to be performed, allocation being slow. whatever the data size is, push_back to a vector will always be faster than to a list. this is logical because vector allocates more memory than necessary and so does not need to allocate memory for each element.
After a lot of arguing (and a reasonable comment from Matthieu M. and villintehaspam), I'll change my suggestion to
v1.insert( v1.end(), v2.begin(), v2.end() );
I'll keep the former suggestion here:
v1.reserve( v1.size() + v2.size() ); v1.insert( v1.end(), v2.begin(), v2.end() );
There are some reasons to do it the latter way, although none of them enough strong:
reserve
either, but for a specific implementation it might be true. If hunting for a bottleneck it might be rasonable to check that.reserve
we have a C++ Standard guarantee that there will be only a single reallocation, while insert
might be implemented inefficiently and do several reallocations (also something to test with a particular implementation). Probably better and simpler to use a dedicated method: vector.insert
v1.insert(v1.end(), v2.begin(), v2.end());
As Michael mentions, unless the iterators are input iterators, the vector will figure out the required size and copy appended data at one go with linear complexity.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With