将2d数组推入C ++ STL堆栈?
int test[5][5];
stack<int**> mystack;
mystack.push(test);
我收到错误:
没有匹配函数调用'std :: stack>> :: push(int [5] [5])'/usr/include/c++/4.4/bits/stl_stack.h:182:注意:候选项是:void std :: stack <_Tp,_Sequence> :: push(const typename _Sequence :: value_type&)[with _Tp = int **,_Sequence = std :: deque>]
我从来没有真正使用过堆栈,所以我很感激任何帮助。 如果我将测试声明为一维数组并且将其作为int *进行堆栈,那么它可以正常工作。
编辑:我试图为sudokusolver实施回溯。 我把数独网格作为一个9x9的集合对象数组(对象持有解决方案或可能的解决方案)。 我必须将拼图的当前状态推入堆栈,然后从那里尝试猜测并检查。 如果猜测产生了矛盾(即违反了数独的规则),那么我会在堆栈中弹出以在无效猜测之前恢复拼图。
在你的例子中, test
不是 int**
类型。
如果你想要一个二维数组,我会推荐使用std::vector
。 这肯定会避免你对数组和指针的困惑......
typedef std::vector<std::vector<int> > two_d_vector;
two_d_vector test;
stack<two_d_vector> mystack;
mystack.push(test);
int **
与2D数组不一样。 一个指向int test[5][5]
的指针是int (*)[5]
,所以你需要一个stack<int (*)[5]>
。 这里有一个很好的解释:C中的数组和指针