2012-09-21 77 views
1

我知道如何創建一個向量或int等的堆棧。但我不知道如何創建一個多維數組t [n] [n]的堆棧。什麼是實現它的方式? 這是我的實際執行情況,它不工作。如何創建一個多維數組的堆棧

char map[20][20]; 
stack<map> soluciones; 

編輯:

我認爲,由於我的英語大部分的你沒有我已瞭解的問題。想象一下,我得到了某種遊戲地圖。我將每個多維數組保存在堆棧中。這就是我的目標保存地圖堆棧

編輯2:使用Visual Studio 2010的Windows窗體應用程序

+1

如果您的編譯器支持它,請使用'std :: array ,20>'。否則,你可能會有'std :: tr1 :: array'。 –

回答

3

在你的代碼示例IM,你在的地方,一個類型名稱的使用map(你的變量名)必須站立(在stack<map>模板實例化中)。但是,它不會工作,甚至沒有,如果你使用正確的類型名稱(在這種情況下,你必須使用的typedef,如typedef char TwoDimCharArray[20][20]然後嘗試std::stack<TwoDimCharArray>

還有,數組沒有問題有一個默認的構造(其std::stack預計);因此,std::stack不能進行直接包含數組;你必須包裹類或結構(其可以具有一個默認的構造)的內部的陣列,例如:

class TwoDimCharArray 
{ 
public: 
    // omit if there's nothing to initialize in map, then the 
    // compiler-generated constructor will be used 
    TwoDimCharArray() 
    { 
     // ... initalize map values 
    } 
    // ... provide access methods to map 
private: 
    char map[20][20]; 
}; 

std::stack<TwoDimCharArray> soluciones; 

或使用Boost.Array或C++ 11 std::array東西!如果這些都可用,它們絕對是更好更容易的選擇!

3

我想你應該爲遊戲地圖定義一個合適的類。那麼這堆遊戲地圖就不成問題了。

class GameMap { 
public: 
... 
private: 
    char map_[1000][1000]; 
}; 

那麼它不會爲你的堆棧分配和管理地圖數據。例如。

typedef std::stack<GameMap> GameMapStack; 
2

Ddefine一個包裝類多維陣列是這樣的:

template <class T, int X, int Y> 
class Wrapper 
{ 
public: 
    T array[X][Y]; 
} 

然後使用stack<Wrapper<char, 20, 20> >

1

首先創建結構,然後定義一個空多維字符數組。然後關閉結構,然後寫入推送和彈出操作。

+0

請給出一個代碼示例來說明您的建議。 –