vector::capacity
: Returns the number of elements that the vector could
contain without allocating more storage.
vector的capacity()調(diào)用返回vector中最大能夠存儲(chǔ)的元素個(gè)數(shù).
當(dāng)有新的元素插入的時(shí)候(vector::push_back)需要擴(kuò)充容量,于是capacity的值就變化。而不同的組織可以制訂自己的變化規(guī)則,即對capacity不同的實(shí)現(xiàn)。
注:reserve會(huì)使容器在必要的時(shí)候增長,以便容納指定數(shù)目的元素。
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的關(guān)系,如果有那是什么呢?
x+ [x/2];
注意:如果先分配capacity=10,那么插入一個(gè)元素后就變?yōu)椋?0+5=15(gcc)
比較起來就是: 前者: x +x ; 后者: x +[x/2];
例如:
同樣的cpu和內(nèi)存下測試i=(0, 4000):
linux gcc:30000ms
window vc6.0:4515ms
注意:在打印的情況下,打印也會(huì)占用很多時(shí)間
上述的試驗(yàn)數(shù)字具有不可再現(xiàn)性。
而我們要做的應(yīng)該是充分認(rèn)識(shí)這一點(diǎn),并且有效的利用這個(gè)特性。
比如:
在插入大量小對象時(shí) 是gcc比較好,還是vc的比較好?
大對象的時(shí)候呢 ?
關(guān)于效率的討論將是下一步的事