c++ - 如何加快C++中2D三角矩阵的内存分配?

标签 c++ matrix dynamic-allocation triangular

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

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];

问题在于,随着矩阵大小的增加,执行此操作(分配内存)所需的时间会迅速增加。有谁知道这个问题的更好解决方案吗?

谢谢。

最佳答案

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

编辑

具体来说,只需分配 N(N+1)/2元素,以及当您想要访问 [r][c] 时在原文中,只需访问 [r*(r+1)/2 + c]相反。

关于c++ - 如何加快C++中2D三角矩阵的内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256986/

相关文章:

c++ - 从 MATLAB 调用 C++ 可执行文件时如何绕过错误对话框?

c++ - 为什么它首先调用 bool_function?

python - 在矩阵元素邻居中求和

r - 在R中,获取矩阵的前10个值并将行名称输出到向量

c - 如何在C中实现动态数组?

c - 使用 C 使用 libpng 逐行写入图像

c - 动态分配指针数组

c++ - 释放指向保留嵌套变量内存地址的结构的指针

c++ - 如何将子类的 vector 传递给需要父类 vector 的函数?

php - 如何以简单/高效的方式进行 PHP 矩阵运算