【发布时间】:2017-05-24 15:17:13
【问题描述】:
这可能是一个愚蠢的问题,但我花了太长时间不知道原因。
在整个数学课中,我们都学会了以 (x, y) 的方式放置坐标。它深深地印在我们的脑海中。现在输入 C/C++ 并访问 x=0, y=3 元素,我必须使用 data[0][3] 而不是 data[3][0]。
为什么数组访问是(y, x)格式而不是(x, y)?
这是有什么特殊原因,还是我必须接受并继续我的生活?
编辑: 我正在观看 Mike Acton (http://gdcvault.com/play/1021866/Code-Clinic-2015-How-to) 的 GDC 演讲,他在其中谈到了有关行主要访问和列主要访问的性能。这是可以理解的,因为任何数组都是顺序内存,如果我尝试进行列主要访问,它需要时间跳转到不同的内存位置。
【问题讨论】:
-
但是是行列格式...
-
当您以行优先顺序存储数组时会发生这种情况。过去有很好的理由这样做,例如。在光栅显示器上显示图像。如果您认为自己真正需要,则无需停止以列优先顺序排列您自己的数组。
-
int array[HEIGHT][WIDTH]=>array[y][x],int array[WIDTH][HEIGHT]=>array[x][y] -
好吧,所以如果你明白他为什么这样做,并且你知道你可以做任何一个,那么究竟有什么不清楚?
-
...因为您已经按照行优先顺序而不是列优先顺序创建了数组。如果您想要传统方式,请制作一个以列为主的数组。或者,或者,创建一个类来包装您的数组并提供方便的
(x, y)访问器(这是大多数人和图书馆最终所做的)。
标签: c++ arrays multidimensional-array