2011-01-23 47 views
0
int test[5][5]; 
stack<int**> mystack; 
mystack.push(test); 

我得到的错误:将2d数组推到C++ STL堆栈上?

no matching function for call to ‘std::stack > >::push(int [5][5])’ /usr/include/c++/4.4/bits/stl_stack.h:182: note: candidates are: void std::stack<_Tp, _Sequence>::push(const typename _Sequence::value_type&) [with _Tp = int**, _Sequence = std::deque >]

我从来没有真正使用堆栈之前,所以我希望得到任何帮助。如果我将测试声明为一维数组并且将其作为int *进行堆栈,那么它可以正常工作。

编辑:我试图为sudokusolver实施追溯。我把数独网格作为一个9x9的集合对象数组(对象持有解决方案或可能的解决方案)。我必须将拼图的当前状态推入堆栈,然后从那里尝试猜测并检查。如果猜测产生矛盾(即违反数独的规则),那么我会在堆栈中弹出以在无效猜测之前恢复难题。

+0

如果'的boost :: array`或'的std :: array` C++ 0x中是允许的,你可以使用 `堆栈<阵列<阵列< int, 5 >,5>>为您的目的。 – 2011-01-23 13:11:48

回答

1

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

+0

我想推动整个数组,而不仅仅是一个指向它的指针。 – kevin 2011-01-23 02:46:26

+0

@kevin:你不能自己推一个数组,只有一个指向它的指针。大部分时间无关紧要,因为您可以像使用数组本身一样使用指针。 – casablanca 2011-01-23 02:48:33

2

在你的例子中,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);