有一个向量载体:
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);
答案 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
}
在这种情况下,您将避免重用现有向量的内存分配。