I have some code which uses thousands of vectors each vector has only 4 entries, So I want to set the initial size of each vector to 4 so that I can optimize memory usage by not reserving unused memory.
I tried reserve method:
vector<Foo> bar;
bar.reserve(10);
but seems it expands and doesn't shrink, seems there also no constructor that creates a vector with a specified capacity.
Also 2 bonus questions:
What's the default initial capacity
Can I create a vector with a specific capacity?
The capacity of a vector cannot be controlled by the constructors - there is no applicable overload.
The C++ standard doesn't give any guarantee about the capacity of a default-constructed vector vector<Foo> bar;
. However all well-known implementations use 0 as the default capacity. This is something you can rely on, as allocating memory at that point just doesn't make sense.
So I believe the answer to your question is: just use
vector<Foo> bar;
bar.reserve(4);
each vector has only 4 entries
Then you're probably better off with a std::array<Foo, 4>
instead.
And in case you need 4 elements because you want a mathematical vector, I suggest a struct:
struct Vector
{
Foo x, y, z, w;
};