将2d数组推入C ++ STL堆栈?

时间:2011-01-23 02:21:40

标签: c++ multidimensional-array stack 2d

int test[5][5];
stack<int**> mystack;
mystack.push(test);

我收到错误:

  

没有用于调用'std :: stack&gt;的匹配函数&gt; :: push(int [5] [5])'   /usr/include/c++/4.4/bits/stl_stack.h:182:注意:候选者是:void std :: stack&lt; _Tp,_Sequence&gt; :: push(const typename _Sequence :: value_type&amp;)[with _Tp = int * *,_ Sequence = std :: deque&gt;]

我之前从未真正使用过堆栈,所以我很感激任何帮助。如果我将test声明为一维数组并将其声明为int *,则可以正常工作。

编辑:我正在尝试为sudokusolver实施回溯。我将sudoku网格作为9x9数组的设置对象(包含解决方案的对象或可能的解决方案)。我必须将拼图的当前状态推到堆栈上,然后从那里尝试猜测并检查。如果一个猜测产生了矛盾(即违反了数独的规则),那么我会在无效猜测之前从堆栈弹出以恢复拼图。

2 个答案:

答案 0 :(得分:2)

在您的示例中,test {<1}}

如果你想要一个二维数组,我建议使用int**。这肯定可以避免你对数组和指针的混淆......

std::vector

答案 1 :(得分:1)

int **与2D数组不同。指向int test[5][5]的指针为int (*)[5],因此您需要stack<int (*)[5]>。这里有一个很好的解释:Arrays and pointers in C