andreas buykx andreas buykx - 9 days ago 5
C++ Question

(re)initialise a vector to a certain length with initial values

As a function argument I get a

vector<double>& vec
(an output vector, hence non-const) with unknown length and values. I want to initialise this vector to a specific length n with all zeroes.

This will work

vec.clear();
vec.resize( n, 0.0 );


And this will work as well:

vec.resize( n );
vec.assign( n, 0.0 );


Is the second more efficient (because no memory deallocation/allocation is involved)? Is there a more efficient way to do this?

Answer
std::vector<double>(n).swap(vec);

After this, vec is guaranteed to have size and capacity n, with all values 0.0.

Perhaps the more idiomatic way since C++11 is

vec.assign(n, 0.);
vec.shrink_to_fit();

with the second line optional. In the case where vec starts off with more than n elements, whether to call shrink_to_fit is a trade-off between holding onto more memory than is required vs performing a re-allocation.