C++ Vector initial capacity

2019-01-27 20:09发布

问题:

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?

回答1:

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);


回答2:

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;
};


标签: c++ vector