2012-02-01 111 views
1

有向量的向量:設置矢量的矢量的第二尺寸爲零(C++)

std::vector <std::vector <float> > VoV; 
VoV.resize(num); // num is determined at run-time 
for (int i=0; i<num; ++i) { 

    VoV[i].resize(3); // initializing to zero 
} 

我要一些操縱之後將所有三個元素爲零。我的意思是,我最初知道它們將被設置爲零,但是它們的值在一段時間後會改變,我想將它們全部設置爲零。那麼,以下是否正確?效率高嗎?還有更好的方法嗎?

std::fill(VoV.begin(), VoV.end(), 0.f); 

回答

2

有很多方法可以將所有數據設置爲零。最簡單的也許是:

VoV = std::vector<std::vector<float> >(num, std::vector<float>(3, 0.)); 

或者,

std::fill(VoV.begin(), VoV.end(), std::vector<float>(3, 0.)); 

或者,

for(std::vector<float>& v : VoV) 
    std::fill(v.begin(), v.end(), 0.); 

甚至:

for(auto& v : Vov) 
    for(auto& f : v) 
    f = 0; 

注:我沒有測試過任何的這些。

+1

值得注意的是,第一個要求重新分配兩個維度中的所有元素。 – 2012-02-01 17:04:51

+0

已注意。第二個需要重新分配分量向量。第三和第四都不需要重新分配。 – 2012-02-01 17:05:59

+0

確實如此。 – 2012-02-01 17:07:55

1

沒有。你有矢量矢量,所以要填充它,你需要一個矢量。除了羅布的回答,以獲得更好的性能做環路(保護你的語法/風格):

for (int i=0; i<num; ++i) { 
    VoV[i].fill(VoV[i].begin(), VoV[i].end(), 0.f); // initializing to zero 
} 

在這種情況下,你會避免內存分配重用現有的載體。