将向量向量的第二维设置为零(C ++)

时间:2012-02-01 16:53:38

标签: c++ stdvector multidimensional-array

有一个向量载体:

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 个答案:

答案 0 :(得分: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 :(得分:1)

不。你有矢量矢量,所以要填充它你需要一个矢量。除了Rob的回答之外,要获得更好的性能,请在循环中执行(保留语法/样式):

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

在这种情况下,您将避免重用现有向量的内存分配。