c++ - 这是存储 float 的二维动态数组的正确初始化吗?

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

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

最佳答案

避免这种方法,它会破坏您的缓存访问。使用一维数组,并创建一个可以通过 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;

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

关于c++ - 这是存储 float 的二维动态数组的正确初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912389/

相关文章:

c++ - 在派生类初始化器列表中初始化模板基类成员类型

c++ - 如何创建一个空的 DOMElement

arrays - 多维可变向量 : possible? 如果是这样,怎么办?

c - C 中的指针与类型转换

r - 如何在 R 中从 2D 矩阵创建 3D 数组?

c++ - 父对象构造期间不受限制的 union 成员生命周期

c++ - 在 C++11 中弃用静态类成员

c++ - fopen64/fseeko64 和 c++ 11

java - 将嵌套的 json 数据解析为字符串

arrays - 最小化代表性整数的误差总和