2014-03-27 21 views
0

在我的程序中,我有一個包含D3DXVECTOR3變量的向量。如可以推斷的那樣,該向量將包含多個D3DXVECTOR3向量。但是爲了提高效率,我只有一個D3DXVECTOR3變量,其值x,y和z I在多次重新載入向量容器之前發生了變化,我只是想知道是否可能有一個D3DXVECTOR3變量,在您之前更新多次推回到你的矢量容器中,或者你是否必須聲明一個新的D3DXVECTOR3變量,但是你想要父矢量包含的許多矢量?將具有輕微修改值的相同D3DXVECTOR3推回到向量中多次

目前的代碼看起來是這樣的:當你考慮你在矢量甚至不保留內存,然後有潛力與前值的副本底層調整

vector<D3DXVECTOR3> gradients; 
D3DXVECTOR3 singleGrad;      

singleGrad.x = 1.0; 
singleGrad.y = 1.0; 
singleGrad.z = 0.0; 
gradients.push_back(singleGrad); 
singleGrad.x = -1.0;       
gradients.push_back(singleGrad); 
singleGrad.x = 1.0; 
singleGrad.y = -1.0; 
gradients.push_back(singleGrad); 
singleGrad.x = -1.0; 
singleGrad.y = -1.0; 
singleGrad.z = 0.0; 
gradients.push_back(singleGrad); 

回答

1

你的效率觀念是完全錯誤的。

您應該考慮編寫代碼易於閱讀和優化在那裏將真正重要的:

std::vector<D3DXVECTOR3> gradients; 
gradients.reserve(4); 
gradients.push_back({ 1.f, 1.f, 0.f}); 
gradients.push_back({-1.f, 1.f, 0.f}); 
gradients.push_back({ 1.f,-1.f, 0.f}); 
gradients.push_back({-1.f,-1.f, 0.f}); 

如果你的代碼大小,比化與循環關注。

std::vector<D3DXVECTOR3> gradients; 
gradients.reserve(4); 
float const signs[] { 1.f, -1.f }; 
for(int v{};v!=2;++v) 
    for(int u{};u!=2;++u) 
     gradients.push_back({signs[u],signs[v], 0.f}); 
相關問題