2D矩阵声明差异

时间:2014-04-09 14:44:14

标签: c++ arrays optimization vector 2d

我注意到我的代码有些奇怪,以及宣布和初始化我的2D矩阵所花费的时间。

第一种方式

vector< vector<double> > gblStiff(dOF, vector<double>(dOF, 0));

dOF是代码中较早确定的值。当dOF = 30000 !!

时,第一种方式大约需要<3秒

第二种方式

double** gblStiff = new double*[dOF];
for (i=0; i < dOF; i++) 
    gblStiff[i] = new double[dOF];

对于相同的dOF,第二种方式需要 0.063秒!!

任何人都可以阐明为什么会发生这种情况?我非常好奇。

1 个答案:

答案 0 :(得分:0)

这确实是一个C ++问题。首先,您可能没有使用优化进行编译。 vector模板确实需要一些编译器帮助才能使用。其次,vector的构造函数初始化所有元素;在您的情况下,它会将dOF*dOF double s初始化为零。 new double[dOF]没有这样的事情;记忆可以包含任何东西。