这是存储浮点数的2D动态数组的正确初始化吗?

时间:2019-04-30 00:24:01

标签: c++ arrays

好吧,我有二维数组,但是由于某种原因,我现在需要它是动态的 就像这样

const int n=100;  const int m=100;
float matrix1 [n][m];

我试图做到这样

int n,m ;
float** matrix1 = new int*[n];
for(int i = 0; i < n; ++i)
    matrix1[i] = new int[m];

我需要数组中的所有元素都是浮点数

1 个答案:

答案 0 :(得分:2)

避免这种方法,它将浪费您的缓存访问权限。使用一个1d数组,并创建一个可以通过2个索引访问元素的函数。

否则,std :: vector比原始指针更安全使用,并且在发行版本中几乎没有性能损失。

赞:

unsigned int n = 100;
unsigned int m = 1000;

std::vector<float> data(n * m, 0.0f);

auto accessor = [&](unsigned int x, unsigned int y) -> float& {
    // optional bounds checks here
    return data[x + y * n];
};

// Do something with your data.
accessor(1, 2) = 1.0f;

更好的方法是将其包装在还存储维度的结构/类中。