2017-05-24 70 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矩陣)。如果你認爲它像一個離散值的矩陣,而不是它從此開始的一個點。

相關問題