2017-05-24 31 views
-4

这可能是一个愚蠢的问题,但我花了太久不知道原因。为什么二维数组访问器[列] [行]而不是[行] [列]格式?

全部通过数学课,我们学会把坐标放在(x,y)时尚。它深入我们的脑海。现在输入C/C++并访问x = 0,y = 3元素,我必须做data[0][3]而不是data[3][0]

为什么数组访问是(y,x)格式而不是(x,y)

有没有特别的理由呢,还是我不得不接受并继续我的生活?

编辑: 我正在看迈克阿克顿(http://gdcvault.com/play/1021866/Code-Clinic-2015-How-to),他谈到了关于行主要访问和列重大的访问性能这一GDC演讲。它是可以理解的,因为任何数组都是顺序存储器,如果我尝试执行列主要访问,则需要时间跳转到不同的内存位置。

+3

但它是行列格式... – Cristy

+1

这就是当你按照行优先顺序存储数组时发生的情况。过去有很好的理由来做这件事,例如。在光栅显示器上显示图像。如果这是你觉得你确实需要的东西,那么没有什么可以停下来把你自己的数组按照专栏顺序排列。 – Rook

+0

'int array [HEIGHT] [WIDTH]'=>'array [y] [x]','int array [WIDTH] [HEIGHT]'=>'array [x] [y]' – 0x5453

回答

0

[row] [col]约定使你看到使用数学的惯例。从代数考虑并排序对:(x,y)x在第一个位置。在数学中这是一致的,直到你找到命令突然改变的线性代数。在处理矩阵时,上下元素应该先出现,如:M [row] [col]。这种约定用于线性代数中的高级操作(如矩阵乘法)中的恒定性...或将3x3矩阵乘以3矢量(或3x1矩阵)。如果你认为它像一个离散值的矩阵,而不是它从此开始的一个点。

相关问题