我有一些使用数千个向量的代码,每个向量只有4个条目,所以我想将每个向量的初始大小设置为4,这样我就可以通过不保留未使用的内存来优化内存使用。
我尝试了预约方法:
vector<Foo> bar;
bar.reserve(10);
但似乎它扩展并且不缩小,似乎也没有构造函数创建具有指定容量的向量。
还有2个红利问题:
默认初始容量是什么
我可以创建具有特定容量的向量吗?
答案 0 :(得分:25)
构造函数无法控制向量的容量 - 没有适用的过载。
C ++标准不保证默认构造的向量vector<Foo> bar;
的容量。但是,所有众所周知的实现都使用0作为默认容量。这是你可以依赖的东西,因为在那时分配内存是没有意义的。
所以我相信你的问题的答案是:只需使用
vector<Foo> bar;
bar.reserve(4);
答案 1 :(得分:8)
每个载体只有4个条目
然后,您可能会更好地使用std::array<Foo, 4>
。
如果您需要4个元素,因为您需要数学向量,我建议使用结构:
struct Vector
{
Foo x, y, z, w;
};