为了账号安全,请及时绑定邮箱和手机立即绑定

将2D阵列映射到1D阵列上

将2D阵列映射到1D阵列上

海绵宝宝撒 2019-08-06 15:50:44
将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)是两者中的“最后”,选择上述两个公式之一。


查看完整回答
反对 回复 2019-08-06
?
冉冉说

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


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 780 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信