C++ 向量初始容量
Posted
技术标签:
【中文标题】C++ 向量初始容量【英文标题】:C++ Vector initial capacity 【发布时间】:2014-05-01 18:43:54 【问题描述】:我有一些代码使用了数千个向量,每个向量只有 4 个条目,所以我想将每个向量的初始大小设置为 4,这样我就可以通过不保留未使用的内存来优化内存使用。
我试过保留方法:
vector<Foo> bar;
bar.reserve(10);
但它似乎扩展而不收缩,似乎也没有构造函数可以创建具有指定容量的向量。
还有 2 个额外问题:
默认初始容量是多少
我可以创建一个具有特定容量的向量吗?
【问题讨论】:
如果要设为4,为什么不设为4? 如果要缩小,请使用shrink_to_fit()
只有我一个人不明白vector<Foo> bar; bar.reserve(4);
有什么问题吗?
@mmohab:如果这就是您所需要的,那么您的问题肯定不会用措辞来表明它。如果你想缩小向量的容量,你为什么要说初始化它?
想一想,如果考虑到向量的初始容量默认大于 4 的可能性,这个问题会很有意义。所以我只想说,虽然不能保证,但标准库的所有知名实现都使用0作为初始容量,你可以安全地使用vector<Foo> bar; bar.reserve(4);
。
【参考方案1】:
构造函数无法控制向量的容量 - 没有适用的重载。
C++ 标准不保证默认构造向量vector<Foo> bar;
的容量。然而,所有众所周知的实现都使用 0 作为默认容量。这是您可以依赖的东西,因为此时分配内存是没有意义的。
所以我相信你的问题的答案是:只需使用
vector<Foo> bar;
bar.reserve(4);
【讨论】:
【参考方案2】:每个向量只有 4 个条目
那么你最好改用std::array<Foo, 4>
。
如果你需要 4 个元素,因为你想要一个 mathematical 向量,我建议使用结构:
struct Vector
Foo x, y, z, w;
;
【讨论】:
换句话说,你需要一个 C++11 编译器。如果没有 GCC 4.9,请使用它。 实际上这不是我需要的,例如矢量大小可能会更改为其他值 5,但所有列表的大小都相同 那你为什么说每个都有四个条目呢?现在你是说它们从零开始,可以超过四? @mmohab:你知道编译时这个长度吗?以上是关于C++ 向量初始容量的主要内容,如果未能解决你的问题,请参考以下文章
C++ priority_queue 底层向量容器容量调整大小