Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二维阵列和一维阵列存储比较? 我有一个问题,了解C++中数组的一些事情。_C++_Arrays_Multidimensional Array_Dynamic Allocation - Fatal编程技术网

二维阵列和一维阵列存储比较? 我有一个问题,了解C++中数组的一些事情。

二维阵列和一维阵列存储比较? 我有一个问题,了解C++中数组的一些事情。,c++,arrays,multidimensional-array,dynamic-allocation,C++,Arrays,Multidimensional Array,Dynamic Allocation,如果我有一个包含3行和4列的数组,我将它们创建为1d数组,并通过在数组中循环4次来访问每行数据。与需要更多分配的2d方法相比,这种方法是否节省了我的时间 因此,与此相反: int **array = new int * [3]; for(int i = 0; i < 4; i++) { array[i] = new int [4]; } 我以这种方式访问每行数据:行=3,列=4: for(int i = 0;i < 3; i++) { for(int j = 0;j

如果我有一个包含3行和4列的数组,我将它们创建为1d数组,并通过在数组中循环4次来访问每行数据。与需要更多分配的2d方法相比,这种方法是否节省了我的时间

因此,与此相反:

int **array = new int * [3];
for(int i = 0; i < 4; i++) {
    array[i] = new int [4];
}
我以这种方式访问每行数据:行=3,列=4:

for(int i = 0;i < 3; i++) {
    for(int j = 0;j < (3 * 4); j++) {
        cout << "row : << i << " , 4: " array[i * j];
    }
}
for(int i=0;i<3;i++){
对于(int j=0;j<(3*4);j++){

cout如果你的数组不是动态的,那么就没有区别。这两个数组将在内存中连续排列


如果您的数组是动态的,那么。

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

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] = {};
};

访问权限应该是
array[columns*i+j]
(或
array[rows*j+i]
)…检查我的编辑?@jarod42使用1d数组可以获得更好的缓存,但如果在编译时知道大小,可以直接执行
int-array[3][4];
。你的意思是我用已知的数字代替变量?检查我的编辑@Jarod42I我的意思是你误用了1D数组(即使这是个好方法).nono我不会将其作为动态使用,我在编译之前知道我的大小。因此,在这种情况下,两者的空间和性能相同,对吗?是否需要创建此模板类作为动态使用?注意,我的大小在编译之前已知,并且我将其放在堆上?
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] = {};
};
 Matrix<int, 3, 4> mat;

 mat.get(1, 2) = 42;