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

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

我想用一维数组表示一个二维数组。函数将传递两个指标(x,y)和要存储的值。这两个标记代表一维阵列的单个元素,并相应地设置它。我知道1D数组需要有arrayWidth×arrayHeight的大小,但我不知道如何设置每个元素。

例如,我如何区分(2,4,3)和(4,2,3)?我尝试将数组设置为x * y,但是2 * 4和4 * 2将导致数组中的相同位置,我需要它们不同。


海绵宝宝撒
浏览 756回答 3
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)是两者中的“最后”,选择上述两个公式之一。

冉冉说

示例:我们想要表示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 ]; }
打开App,查看更多内容
随时随地看视频慕课网APP