我知道如何创建一堆矢量或int等。但我不知道如何创建一个多维数组t [n] [n]的堆栈。是什么方式实施它? 这是我的实际实施,它不起作用。
char map[20][20];
stack<map> soluciones;
编辑:
我认为,由于我的英语,你们大多数人都没有解决我的问题。想象一下,我得到了某种游戏地图。我正在堆栈上保存每个multidimentional数组。这就是我的目标是将地图保存在堆栈上
编辑2:即时通讯使用Visual Studio 2010 Windows表单应用程序
答案 0 :(得分:3)
在您的代码示例中,您使用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
的东西!如果这些可用,它们绝对是更好更容易的选择!
答案 1 :(得分:3)
我猜你应该为游戏地图定义一个合适的类。然后这堆游戏地图不是问题。
class GameMap {
public:
...
private:
char map_[1000][1000];
};
然后,对于堆栈如何分配和管理地图数据并不重要。 E.g。
typedef std::stack<GameMap> GameMapStack;
答案 2 :(得分:2)
为多维数组定义一个包装类,如下所示:
template <class T, int X, int Y>
class Wrapper
{
public:
T array[X][Y];
}
然后使用stack<Wrapper<char, 20, 20> >
答案 3 :(得分:1)
首先创建结构,然后定义一个空的多维char数组。然后关闭结构并在编写推送和弹出操作之后。