将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中的数组和指针

链接地址: http://www.djcxy.com/p/82707.html

上一篇: Pushing a 2d array onto a C++ STL stack?

下一篇: How is std::string implemented?