我如何创建一个多维数组的堆栈

时间:2012-09-21 08:30:26

标签: c++ visual-studio-2010 multidimensional-array stack

我知道如何创建一堆矢量或int等。但我不知道如何创建一个多维数组t [n] [n]的堆栈。是什么方式实施它? 这是我的实际实施,它不起作用。

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

编辑:

我认为,由于我的英语,你们大多数人都没有解决我的问题。想象一下,我得到了某种游戏地图。我正在堆栈上保存每个multidimentional数组。这就是我的目标是将地图保存在堆栈上

编辑2:即时通讯使用Visual Studio 2010 Windows表单应用程序

4 个答案:

答案 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数组。然后关闭结构并在编写推送和弹出操作之后。