阵列可以是线性的(一维)或多维的。只要它们给出相同的结果,这些数组之间有什么区别?
我认为数组是内存中相同类型和大小的一组连续地址。这适用于多维数组吗?
#include <iostream>
using namespace std;
int main()
{
int array1[4] = {0, 1, 2, 3};
int array2[1][4] = {0, 1, 2, 3};
int array3[1][2][2] = {0, 1, 2, 3};
cout << array1[0] << endl; // 0
cout << array2[0][0] << endl; // 0
cout << array3[0][0][0] << endl; // 0
cout << array1[2] << endl; // 2
cout << array2[0][2] << endl; // 2
cout << array3[0][1][0] << endl; // 2
return 0;
}
答案 0 :(得分:1)
多维数组可以表示至少两种方式之一:单个1x(N * M)数组,或N个1xM数组(在内存中也是连续的)。为了符合您的命名法,我们将前者称为线性阵列,后者称为多维&#34;阵列。
行顺序(如C ++)的语言在线性存储数组时因缓存一致性(由于空间局部性)而大大受益。迭代列时,您会更频繁地发现缓存未命中。
这显然取决于缓存的大小以及您认为自己在矩阵上迭代的频率,因此在做出巨大的设计决策之前,请确保它是瓶颈。
有关详细信息,请参阅this question和wikipedia。
答案 1 :(得分:1)
这只是语法糖。您可以将普通int声明为int x;
或int x[1][1][1][1][1];
。它不会影响内存布局,但后者的使用非常不方便,只需要一个整数。
类似地,当处理应该代表2个维度的数据时,使用单个&#34;损坏的&#34;您必须通过[i*YSIZE + j]
而不是[i][j]
访问的数组。
答案 2 :(得分:0)
说我必须将 10 1维数组存储在一起。那你会怎么做?
将它们合并为一个大数组?
这是一种可能的解决方案! 但是没有!什么是更整洁和可读的解决方案?制作一个一维数组的数组!不是吗?这给了我们一个二维数组。
即使您可以访问所有类型的数组中的值,这也是多维数组的重要性。
我希望你现在还没有开始编码。因为一旦你开始编码,单维度和多维度的使用变得更加明显,而不是从阅读中收集知识。