C ++中向量的初始容量

什么是使用默认构造函数创build的std::vectorcapacity() ? 我知道size()是零。 我们能否声明一个默认构造的向量不会调用堆内存分配?

这样就可以用一个分配来创build一个任意保留的数组,比如std::vector<int> iv; iv.reserve(2345); std::vector<int> iv; iv.reserve(2345); 。 假设出于某种原因,我不想在2345年开始size()

例如,在Linux(g ++ 4.4.5,kernel 2.6.32 amd64)

 #include <iostream> #include <vector> int main() { using namespace std; cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl; return 0; } 

打印0,10 。 这是一个规则,还是STL供应商的依赖?

标准没有指定容器的初始capacity应该是什么,所以你依靠实现。 一个普通的实现将启动容量为零,但不能保证。 另一方面,没有办法改善你的策略std::vector<int> iv; iv.reserve(2345); std::vector<int> iv; iv.reserve(2345); 所以坚持下去

std :: vector的存储实现差别很大,但是我遇到的所有实现都从0开始。

以下代码:

 #include <iostream> #include <vector> int main() { using namespace std; vector<int> normal; cout << normal.capacity() << endl; for (unsigned int loop = 0; loop != 10; ++loop) { normal.push_back(1); cout << normal.capacity() << endl; } std::cin.get(); return 0; } 

给出以下输出:

 0 1 2 4 4 8 8 8 8 16 16 

根据GCC 5.1和:

 0 1 2 3 4 6 6 9 9 9 13 

在MSVC 2013下。