2d阵列和1d阵列存储比较? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有一个问题,了解C ++中有关数组的一些事情。

如果我有3行和4个colomns的数组,我将它们创建为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];

我以这种方式访问​​每一行数据:rows = 3,columns = 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. 这是一个糟糕的方法还是一个好的方法,像我一样在一维数组中扭动我的二维数组?

注意 :

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

c++ arrays multidimensional-array dynamic-allocation
2个回答
0
投票

您可以创建一个Matrix类,如下所示:

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;

0
投票

如果你的阵列不是动态的那么没有区别。两者都将在记忆中连续布局。

如果您的阵列是动态的,那么read this answer

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