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的比較好?
大對象的時候呢 ?
關于效率的討論將是下一步的事