C++ Vector初始容量

mmo*_*hab 13 c++ vector

我有一些使用数千个向量的代码,每个向量只有4个条目,所以我想将每个向量的初始大小设置为4,这样我就可以通过不保留未使用的内存来优化内存使用.

我试过保留方法:

vector<Foo> bar;
bar.reserve(10);
Run Code Online (Sandbox Code Playgroud)

但似乎它扩展并且不缩小,似乎也没有构造函数创建具有指定容量的向量.

还有2个奖励问题:

什么是默认初始容量

我可以创建具有特定容量的向量吗?

Ale*_*lex 28

向量的容量不能由构造函数控制 - 没有适用的过载.

C++标准不保证默认构造的向量的容量vector<Foo> bar;.但是,所有众所周知的实现都使用0作为默认容量.这是你可以依赖的东西,因为在那一点分配内存是没有意义的.

所以我相信你的问题的答案是:只需使用

vector<Foo> bar;
bar.reserve(4);
Run Code Online (Sandbox Code Playgroud)


fre*_*low 9

每个向量只有4个条目

然后你可能会更好地std::array<Foo, 4>改用.

如果你需要4个元素,因为你想要一个数学向量,我建议一个结构:

struct Vector
{
    Foo x, y, z, w;
};
Run Code Online (Sandbox Code Playgroud)

  • 那么为什么说每个都有四个条目呢?现在你是说它们从零开始,可以超过四? (3认同)