我想創建一個非常容易使用的2D網格。網格中的每個單元都需要能夠存儲大量數據。理想情況下,我希望能夠一次遍歷網格中的一個單元格,以及獲取任何網格單元的直接鄰居。如何在C++中創建高效的2D網格?
我的第一個想法是存儲一個指向Cell的鄰居的指針矢量(總共4個),然後爲leftNeighbour,rightNeighbour等創建便利函數。初始化後連接網格。
std :: vector應該是一個動態調整大小的數組,所以如果我只是硬編碼指針的位置(0 == left,1 == right等)。但是,它確實允許更好地遍歷單元格的鄰居。另一件事,我必須考慮的是,如果單元位於網格邊緣的邊界上(無論是測試此網格,還是僅隱式地將網格擴展爲一個網格,以避免這種情況發生)。
任何人都可以提出一個更好的選擇,或者這聽起來像一個合理的設計?
感謝,丹
不要使用矢量>,由於沒有緩存局部性,它的性能很差。改爲使用平面矢量,並用y * w + x對其進行索引(這可以輕鬆封裝)。 –
2009-01-25 20:32:43
@Iraimbilanja,我同意,但在這種情況下,在X方向上調整地圖的尺寸將非常昂貴。如果大小是靜態的,平面陣列可能是最好的。 – strager 2009-01-25 20:36:31