1

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

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

编辑:

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

编辑 2:我使用 Visual Studio 2010 Windows 窗体应用程序

4

4 回答 4

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.ArrayC++11std::array的东西!如果这些可用,它们绝对是更好、更容易的选择!

于 2012-09-21T08:36:26.617 回答
3

我想你应该为游戏地图定义一个适当的类。那么游戏地图的堆叠就不是问题了。

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

然后,堆栈如何分配和管理地图数据就无关紧要了。例如

typedef std::stack<GameMap> GameMapStack;
于 2012-09-21T08:42:09.253 回答
2

为多维数组定义一个包装类,如下所示:

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

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

于 2012-09-21T08:44:45.637 回答
1

首先创建结构,然后定义一个空的多维字符数组。然后关闭结构并在编写推送和弹出操作之后。

于 2012-09-21T08:46:33.507 回答