如何加快c ++中二维三角矩阵的内存分配?

fun*_*man 2 c++ matrix triangular dynamic-allocation

我需要为一个代表三角矩阵的非常大的数组分配内存.我写了以下代码:

const int max_number_of_particles=20000;
float **dis_vec;

dis_vec = new float **[max_number_of_particles];

for (i = 0; i<max_number_of_particles; i++)
  dis_vec[i] = new float *[i];

for (i = 0; i<max_number_of_particles; i++)
  for (j = 0; j<i; j++)
    dis_vec[i][j] = new float[2];
Run Code Online (Sandbox Code Playgroud)

问题是这样做所需的时间(分配内存)随着矩阵大小的增加而迅速增加.有谁知道这个问题更好的解决方案?

谢谢.

lij*_*jie 5

分配一维数组并将索引转换为下标,反之亦然.与分配相比,一个O(N)分配应该快得多.

编辑

具体来说,只需分配N(N+1)/2元素,当您想要访问[r][c]原始元素时,只需访问即可[r*(r+1)/2 + c].

  • 您可以将下标代码移动到可读性/可维护性的函数中. (3认同)