aJ.
aJ.

Reputation: 35490

what is the capacity of an empty vector?

Looks like a stupid question. But comment to my answer to one of the SO question made me to think again.

[ comment says, capacity need not be zero for empty vector]

By default my answer would be 0 as there are no elements inside vector. It makes sense to keep the capacity as 0 and on the first allocation it can be increased without any performance hits.

But standard does not say anything one this. ( I checked in Josuttis book as well).

Is it purely implementation specific? Does any STL vendor use some arbitrary number as capcity for the empty vector?

Any thoughts...

Upvotes: 7

Views: 3107

Answers (4)

Vivek
Vivek

Reputation: 473

One can change capacity of vector by using resize() API on vector if one is sure of what data vector is going to store and that is implementation specific.

Upvotes: -1

GManNickG
GManNickG

Reputation: 504303

The capacity can be whatever the implementors feel is correct or necessary.

It should also be noted it's never "safe" to assume you know the current capacity() without a call to that function. If you reserve 10 elements, the implementor is of free to allocate one hundred if it so wants to. Or 11, 42 (preferred) or just 10.

Upvotes: 7

Kirill V. Lyadvinsky
Kirill V. Lyadvinsky

Reputation: 99705

C++ Standard 23.2.4.2 only says that vector::capacity is

The total number of elements that the vector can hold without requiring reallocation.

That means that the actual value is fully implementation specific.

Upvotes: 17

Donnie
Donnie

Reputation: 46943

For a quick scan of Google and bouncing off a few random forums (of generally unknown pedigree, so, yeah), it appears to be implementation specific.

Pretty much a non-issue since you can immediately change it with a call to reserve.

Upvotes: 0

Related Questions