为什么2D数组访问器[Column] [Row]而不是[Row] [Column]格式?

时间:2017-05-24 15:17:13

标签: c++ arrays multidimensional-array

这可能是一个愚蠢的问题,但我花了太长时间不知道理由。

在整个数学课程中,我们学会将坐标放在(x,y)时尚中。它坚持我们的思想。现在输入C / C ++并访问x = 0,y = 3元素,我必须data[0][3]而不是data[3][0]

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

这有什么特别的理由,还是我必须接受并继续我的生活?

修改 我正在观看Mike Acton的这次GDC演讲,(http://gdcvault.com/play/1021866/Code-Clinic-2015-How-to)在那里他讨论了关于行主要访问和列主要访问的性能。它是可以理解的,因为任何数组都是顺序存储器,如果我试图进行列主要访问,它需要时间跳转到不同的存储器位置。

1 个答案:

答案 0 :(得分:0)

[row] [col]约定因为当你看到使用数学的约定时。从代数中考虑和订购对:(x,y)其中x首先出现。这在数学上是一致的,直到你一直到线性代数,其中顺序突然改变。在处理矩阵时,上下元素应首先出现在:M [row] [col]中。此约定用于线性代数中,用于更高级别操作(例如矩阵乘法)中的恒定性...或将3x3矩阵乘以3矢量(或3x1矩阵)。如果你认为它就像一个离散值矩阵而不是它自那以后的一个点。