C ++中向量的初始容量
什么是使用默认构造函数创build的std::vector
的capacity()
? 我知道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下。