2D阵列和1D阵列存储比较

2d array and 1d array storage comparison?

本文关键字:阵列 比较 存储 2D 1D      更新时间:2023-10-16

我有一个问题,理解了C 中的一些阵列。

如果我的数组有3行和4个COLOMN,并且我将它们创建为1D数组,并通过每次循环循环4时访问每个行数据。与2D方法相比,这种方式可以节省我的时间。

所以而不是这样:

int **array = new int * [3];
for(int i = 0; i < 4; i++) {
    array[i] = new int [4];
}

我做这个:

int *array = new int [3 * 4];

我以这种方式访问每个行数据:行= 3,colomns = 4:

for(int i = 0;i < 3; i++) {
    for(int j = 0;j < (3 * 4); j++) {
        cout << "row : << i << " , 4: " array[i * j];
    }
}
  1. 以这种方式节省了我的程序的时间比2D或否?

  2. 是一种不好的方法还是好方法,像我一样在1D数组中扭动我的2D数组?

注意:

我的数组不会动态,在创建它之前,我的数组的大小会知道,我将在我的神经网络项目中使用它。我担心和关注速度是速度。

您可以创建一个矩阵类,如下:

template <typename T, std::size_t R, std::size_t C>
class Matrix
{
public:
    const T& get(std::size_t i, std::size_t j) const { return data[i][j]; }
    T& get(std::size_t i, std::size_t j) { return data[i][j]; }
private:
    T data[R][C] = {};
};

data是连续的,偏移计算将由编译器完成。

用法将是:

 Matrix<int, 3, 4> mat;
 mat.get(1, 2) = 42;

如果您的数组不是动态的,则没有区别。两者都将在内存中连续布置。

如果您的数组是动态的,请阅读此答案。