繁体   English   中英

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

[英]Pushing a 2d array onto a C++ STL stack?

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(常量类型名_Sequence :: value_type&)[with _Tp = int **,_Sequence = std :: deque>]

我以前从未真正使用过堆栈,因此我将不胜感激。 如果我将test声明为一维数组,并将stack声明为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中的数组和指针

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM