2014-12-22 76 views
-3

所以這是我的問題。我有一個multidimessional數組,以至於我試圖把一些從類Block派生的對象。我已經這個multidimessional陣列中聲明的方式如下:我可以在對象*** p中有一個指針矢量嗎?

Block ***arrTerrain; 

其中第一「」是線,第二「」是collumns,三是爲指針的位置內的對象(我們假設它是一個名爲FreeTerrain的對象)。

我初始化這樣說:

this->arrTerrain = new Block**[a]; 

for(int i=0;i < a ;i++){ 
    arrTerrain[i] = new Block*[l]; 
} 

for(int i=0;i<a;i++) 
    for(int j=0;j<l;j++) 
     arrTerrain[i][j] = new FreeTerrain; 

我應該有一個給定的位置戰士(戰士類從塊藏漢派生)。如果我想把兩名士兵放在同一個位置,我就會失去指向第一名士兵的指針(明顯地)。所以我想在每個位置都有一個Blocks或者一些排序的向量,但是我覺得這很難實現。

你們能幫助我嗎?

在此先感謝!

+4

恭喜!你是一位三星級程序員! – rightfold

+0

你是受虐狂嗎?如果是這樣,你可以做一個AMA嗎? – Shoe

+0

如果您建議使用矢量,爲什麼不從一開始就使用矢量來表示這個多維數組?然後再一次,你可以成爲一名**四星級**程序員,並做「Block ****」,但這很荒唐。 –

回答

2

答案是肯定的,你可以做一個(幾乎)任何東西的向量。

現在隱含的問題是「我應該做一個對象***的向量」,答案是nooooooo。

首先,您只能在必要時使用指針。如果你有一組FreeTerrain都是同一個班級,不需要對他們使用新的只是做一個FreeTerrain的數組。

而且你不應該在一個向量中存放數組,這只是要求麻煩。您可以使用std::vector<std::vector<FreeTerrain>>

編輯:從下面的評論,如果你真的需要使用指針(比如,有多態性引用)使用唯一的指針:

std::vector<std::vector<std::unique_ptr<FreeTerrain>>> v; 
+0

我明白你想說什麼,但我的問題是:我必須有一個2D數組。如果我只是做一個矢量我只是吹多態性。因爲我需要有士兵或城堡.. FreeTerrain只是一個空的空間的代表。 感謝您的回答:) –

+1

@DiogoNunes使用['unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)或['shared_ptr'](http:/ /en.cppreference.com/w/cpp/memory/shared_ptr)。這些多態對象的二維數組可以是'std :: vector >>'。你會用['std :: make_unique'](http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)分配它們。如果你使用共享指針,那麼它是['std :: make_shared'](http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared)。 –

+0

謝謝你的時間,你非常有幫助。乾杯。還有穆罕默德! –

相關問題