这是存储浮点数的2d动态数组的正确初始化吗? [关闭]

问题描述 投票:-1回答:1

好吧,我有2d阵列,但由于某种原因,我现在需要它是动态的,所以就像这样

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

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

c++ arrays
1个回答
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;

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

© www.soinside.com 2019 - 2024. All rights reserved.