一维数组元素的最近邻运算

时间:2011-10-22 19:52:45

标签: c++ multidimensional-array

我有二维数组并希望将其转换为一维数组。

2D数组是:

1   2   3   4
5   6   7   8
9   10  11  12
13  14  15  16

到1D数组:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

如何在1D数组中访问元素编号 6 的最近邻居,以便在访问2D数组时获得相同的结果,例如

1   2   3   
5   6   7   
9   10  11

在C ++中?

1 个答案:

答案 0 :(得分:3)

如果您有一个M个项目长N项高的2D数组,则需要一个具有M*N个元素的一维数组。

尝试查找元素x的邻居时:

left(x) = (x - 1) % M
right(x) = (x + 1) % M
above(x) = (x - M) % (M * N)
below(x) = (x + M) % (M * N)

请注意,上述解决方案使阵列的底部和顶部相邻,以及右边缘和左边缘。要摆脱这种情况,只需省略模块化数学并检测索引何时移过右/左/上/下边缘。