2011-08-02 16 views
3

我有一個std :: vector,我知道它永遠不會增長 - 它總是會有n元素(不幸的是,n在編譯時不知道,所以我可以'使用std :: array)。我可以這樣做:防止std :: vector在push_back上調整大小

​​

它正確地將其容量設置爲n。但是,當我着手填補vpush_back,它會自動調整大小以2n

我意識到這是過早的優化,但它的煩我。有沒有辦法設置最大尺寸或什麼?

回答

13

構造函數不會將矢量的容量設置爲n,而是創建一個包含n的矢量,該矢量使用blah的默認構造函數構造。對於擁有Java或.NET背景的人來說,這可能會令人困惑,其中ArrayListList<T>都具有設置初始容量的構造函數。

解決的辦法是做兩個步驟:

std::vector<blah> v; // create an empty vector 
v.reserve(n); // increase capacity 
+2

對於它的價值,這將不警惕產能增長,如果有人誤用向量並導致加倍的能力。如果你想要這樣的安全,你可能需要推出自己的班級。 –

+0

謝謝。對不起,這個愚蠢的問題! –