0

好的,我有一个数组 A[4][4] 和另一个 A[16],它们只是彼此的不同表示。现在,我在二维数组上获得了一个元素位置,但我必须从一维数组访问它。IE,如果我被告知要访问一维数组中的元素 A[2][0],我该怎么做?

4

2 回答 2

0

在这个简单的示例中,A[2][0]映射到,A[8]因为您正在请求第三组四个中的第一个元素。同样,A[0][2]映射到,A[2]因为您正在请求第一组四个元素中的第三个元素。通常 ( A[i][j]) 您正在请求 的 (i*4+j)-th 元素A

在更一般的情况下,您请求的是 (i*width+j)-th 元素。

于 2013-10-19T01:16:18.690 回答
0

这取决于您的编程语言和数组类型的选择。根据您的语言,数组以行优先顺序或列优先顺序存储:


编辑:根据文档,Java 没有多维数组:在 Java 中,多维数组是由数组组成的数组,即其元素是对数组对象的引用的数组。这意味着每一行可以有不同的长度,因此存储格式既不是行优先也不是列优先。


行优先顺序用于 C/C++、PL/I、Python、Speakeasy 等。列优先顺序用于 Fortran、MATLAB、GNU Octave、R、Julia、Rasdaman 和 Scilab。

在某些语言中,您还可以选择顺序(例如 MATLAB)

对于row-major orderA[2][0]将在A[2*4+0](其中 4 是一行的大小):

偏移量 = 行*NUMCOLS + 列

对于column-major orderA[2][0]将在A[0*4+2](其中 4 是一列的大小):

偏移量 = 行 + 列*NUMROWS

这真的取决于你的编程语言!

于 2013-10-19T01:12:56.587 回答