【发布时间】:2014-09-18 13:04:22
【问题描述】:
我有一个巨大的 3d 矢量,用于存储双精度值。为了提高性能,我想在处理之前提前保留我知道的元素数量;但是,我无法真正弄清楚在这种情况下,reserve&clear&erase 是如何工作的。
我已经实现了一个在这种情况下具有二维向量的小程序,请参见下面的代码 sn-p:`
for(int counter = 0; counter < 2; counter++){
cout << "Counter-> " << counter << endl;
vector<vector<double> > vec2D;
vec2D.reserve(2);
// assign values to the vec
for(int i = 0; i < 2; i++){
vec2D[i].reserve(5);
for(int j = 0; j < 5; j++){
vec2D[i][j] = j;
}
}
// print the vector content
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
cout << vec2D[i][j] << "\t";
}
vec2D[i].clear();
cout << endl;
}
vec2D.clear();
}
当我运行这段代码 sn-p 时,它只遍历 for 循环一次,而它应该执行两次;但是,当我在 for 循环之外声明向量时,它会迭代两次。上面sn -p的输出是:
Counter-> 0
0 1 2 3 4
0 1 2 3 4
Counter-> 1
您能否说明一下在这种情况下它实际上应该如何以及它是如何工作的。
提前致谢。
【问题讨论】:
-
旁注:查看stackoverflow.com/questions/17259877/…,了解当性能成为问题时您可能不想使用
vector<vector<T>>或vector<vector<vector<T>>>的原因。 -
谢谢,我去看看。
-
你知道有Boost Multidim吗? boost.org/doc/libs/1_55_0/libs/multi_array/doc/user.html
-
在我的情况下 boost multidim 数组比 std::vector 慢。
标签: c++ memory-management vector multidimensional-array