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数组的设置对象(包含解决方案的对象或可能的解决方案)。我必须将拼图的当前状态推到堆栈上,然后从那里尝试猜测并检查。如果一个猜测产生了矛盾(即违反了数独的规则),那么我会在无效猜测之前从堆栈弹出以恢复拼图。
答案 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。