嗯...
想盡了辦法:
std::vector<T>::reserve(x)
它將使你保留足夠的內存對於x項目沒有任何初始化(你的載體仍然是空的)。因此,直到x纔會重新分配。
第二點是矢量不會將值初始化爲零。你在調試中測試你的代碼嗎?
驗證的G ++,下面的代碼後:
#include <iostream>
#include <vector>
struct MyStruct
{
int m_iValue00 ;
int m_iValue01 ;
} ;
int main()
{
MyStruct aaa, bbb, ccc ;
std::vector<MyStruct> aMyStruct ;
aMyStruct.push_back(aaa) ;
aMyStruct.push_back(bbb) ;
aMyStruct.push_back(ccc) ;
aMyStruct.resize(6) ; // [EDIT] double the size
for(std::vector<MyStruct>::size_type i = 0, iMax = aMyStruct.size(); i < iMax; ++i)
{
std::cout << "[" << i << "] : " << aMyStruct[i].m_iValue00 << ", " << aMyStruct[0].m_iValue01 << "\n" ;
}
return 0 ;
}
得出以下結果:
[0] : 134515780, -16121856
[1] : 134554052, -16121856
[2] : 134544501, -16121856
[3] : 0, -16121856
[4] : 0, -16121856
[5] : 0, -16121856
你所看見的初始化可能是一個假象。
[編輯]在對調整大小的評論後,我修改了代碼以添加調整大小的行。調整大小有效地調用了矢量內的對象的默認構造函數,但如果默認的構造函數什麼也不做,那麼什麼都不會初始化......我仍然相信它是一個神器(我第一次管理整個矢量與下面的代碼:
aMyStruct.push_back(MyStruct()) ;
aMyStruct.push_back(MyStruct()) ;
aMyStruct.push_back(MyStruct()) ;
所以... : - 。/
[編輯2]已經長Arkadiy提供的一樣,解決方法是使用內聯構造函數取所需的參數喜歡的東西
struct MyStruct
{
MyStruct(int p_d1, int p_d2) : d1(p_d1), d2(p_d2) {}
int d1, d2 ;
} ;
這可能會在你的代碼中被內聯。
但是,您應該無論如何都應該使用探查器研究您的代碼,以確保這段代碼是您的應用程序的瓶頸。
注 - 使用儲備()不是一個解決方案,因爲你不能合法訪問是在位置結束()和上面的數據。 – 2008-09-18 20:36:23
另一個解釋:並不是構造函數將值初始化爲0.這就是調整大小調用插入,這是。 – 2008-09-18 20:42:06
你能否給我們結構聲明?謝謝... :-) – paercebal 2008-09-18 21:00:26