2012-09-21 38 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

请给出一个代码示例来说明您的建议。 –