将2D阵列映射到1D阵列上我想用一维数组表示一个二维数组。函数将传递两个指标(x,y)和要存储的值。这两个标记代表一维阵列的单个元素,并相应地设置它。我知道1D数组需要有arrayWidth×arrayHeight的大小,但我不知道如何设置每个元素。例如,我如何区分(2,4,3)和(4,2,3)?我尝试将数组设置为x * y,但是2 * 4和4 * 2将导致数组中的相同位置,我需要它们不同。
3 回答
白板的微信
TA贡献1883条经验 获得超3个赞
将二维数组索引重新计算为一维数组索引的典型公式为
index = indexX * arrayWidth + indexY;
或者你可以使用
index = indexY * arrayHeight + indexX;
(假设arrayWidth
沿X轴测量,arrayHeight
沿Y轴测量)
当然,人们可以提出许多不同的公式来提供替代的唯一映射,但通常没有必要。
在C / C ++语言中,内置的多维数组存储在内存中,以便最后一个索引的变化速度最快,这意味着对于声明为
int xy[10][10];
元素xy[5][3]
紧跟xy[5][4]
在内存中。您可能也想遵循该约定,根据您认为哪个索引(X或Y)是两者中的“最后”,选择上述两个公式之一。
冉冉说
TA贡献1877条经验 获得超1个赞
示例:我们想要表示SIZE_X和SIZE_Y大小的2D数组。这意味着我们将拥有MAXY连续的MAXX大小行。因此设定功能是
void set_array( int x, int y, int val ) { array[ x * SIZE_Y + y ] = val; }
得到的将是:
int get_array( int x, int y ) { return array[ x * SIZE_Y + y ]; }
添加回答
举报
0/150
提交
取消