Re: default size of STL vector question
On Oct 14, 6:00 pm, "Andrew Koenig" <a...@acm.org> wrote:
"zl2k" <kdsfin...@gmail.com> wrote in message
news:1192332345.402818.81120@z24g2000prh.googlegroups.com...
What is the default size of a stl vector?
Zero.
Suppose I have integers
needs to store in a vector and I know the max number of integer is,
say, 1000. Will it be more efficient that I first allocate size of
1000 and then use {vector[counter] = aNumber; counter++} to populate
the vector than by push_back(aNumber)?
Your best bet is probably to reserve enough space (that is, call reserve
rather than resize) and then call push_back repeatedly.
Example:
vector<int> v;
v.reserve(n);
for (int i = 0; i < n; ++i)
v.push_back(i);
That way, you avoid having to reallocate vector elements, and
you also avoid having to construct elements that you overwrite
later.
That was more or less what I'd assumed until I actually measured
it. For an std::vector<int>, at least for the implementation I
measured (g++ on Sun Sparc, IIRC), doing the initializations was
slightly faster than the push_back's.
This obviously depends on the type--if default construction
followed by assignment is significantly slower than for int, for
example---and the implementation, and as a general rule, I'd
still go with reserve() plus the push_back(), since it will
always be almost as fast, and protects against the case where
construction plus assignment is expensive. But if performance
matters, you have to profile.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34