vector::capacity
: Returns the number of elements that the vector could
contain without allocating more storage.
vector的capacity()调用返回vector中最大能够存储的元素个数.
当有新的元素插入的时候(vector::push_back)需要扩充容量,于是capacity的值就变化。而不同的组织可以制订自己的变化规则,即对capacity不同的实现。
注:reserve会使容器在必要的时候增长,以便容纳指定数目的元素。
vector<int> v;
v.reserve(10);
cout << v.capacity() << endl; //10
那么在linux:(kernel2.6.9)gcc下:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> v;
for(int i=0;i<40;i )
{
v.push_back(i);
cout<< v.capacity()<<endl;
}
return 0;
}
将输出: 1 2 4 8 16 .... 2^n
上述程序在windows vc6.0下:
将输出: 1 2 3 4 6 6 9 9 9 ....
显然不是2^n的关系,如果有那是什么呢?
x+ [x/2];
注意:如果先分配capacity=10,那么插入一个元素后就变为:10+5=15(gcc)
比较起来就是: 前者: x +x ; 后者: x +[x/2];
例如:
同样的cpu和内存下测试i=(0, 4000):
linux gcc:30000ms
window vc6.0:4515ms
注意:在打印的情况下,打印也会占用很多时间
上述的试验数字具有不可再现性。
而我们要做的应该是充分认识这一点,并且有效的利用这个特性。
比如:
在插入大量小对象时 是gcc比较好,还是vc的比较好?
大对象的时候呢 ?
关于效率的讨论将是下一步的事