2013-09-29 83 views
0

今天,我有一個關於在多維數組中存儲對象/結構或其他值的一般問題。C++中的多維數組?

實際情況如下,但我可能需要類似的解決方案在許多其他地方,這就是爲什麼我想問你最好的做法。

假設我們有側面滾動遊戲。現在我需要以某種二維數組的形式存儲關於世界單元格的信息,其中0:0將是原始位置。在比賽開始時,我產生了世界的一小部分,比如從-10:-5到10:5。玩家可以左右移動(有時上下),所以當他到達世界的邊緣時,我必須產生更多的世界信息。現在我的問題:我應該如何存儲具有不同極值的二維數組?有沒有關於如何做到這一點的最佳做法?你會怎麼做?

再次感謝您的幫助!

+1

主要是'矢量>'。 – 2013-09-29 18:58:14

+0

@ H2CO3如何理想地跟蹤維度?說一點,我的領域從-101:-18延伸到55:12或什麼的。如何確定存儲單元格0:0的信息? –

+1

使用變量。類型'size_t'或'int'或其他。 '矢量'知道它的大小。 – 2013-09-29 19:04:22

回答

4

不要將它作爲數組存儲,請使用包含座標和值的結構。

然後將這些對象存儲在更智能的結構中 - deque,list或tree,具體取決於它們需要如何搜索。

+0

很酷,我以前不知道deques,他們聽起來很方便。謝謝! –

+0

@LarsEbert如果你打算沿任何方向移動(而不是在1d中滾動),然後看樹。 –

+0

好吧,我只是搜索了「樹」,我不知道我的期望是什麼...但嚴重的是,我理解(二叉樹)的定義,但我不知道如何將這個世界存儲在樹中。 –

1

解決方案#1:使用1d數組與size == dimension1*dimension2*dimension3*....並仿真多維數組。您將不得不編寫自己的調整大小代碼(應該很容易)
解決方案#2:使用稀疏數組。 A std::map<Coordinate, Value>會做。
解決方案#3Boost.MultiArray
解決方案#4:不要將世界存儲爲N維數組。將對象存儲爲list/deque/whatever,然後使用BSP樹,八叉樹,掃描和修剪或空間分區來快速定位可見區域中的對象。