Перенос 2d массива в стек C ++ STL? - PullRequest
0 голосов
/ 23 января 2011
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 как одномерный массив и помещаю его как int *, он работает нормально.

Редактировать: я пытаюсь реализовать обратный ход для sudokusolver. У меня есть сетка судоку в виде массива заданных объектов размером 9x9 (объекты, которые содержат решение или возможные решения). Я должен поместить текущее состояние головоломки в стек, а затем оттуда попробовать угадать и проверить. Если предположение создает противоречие (то есть нарушает правила судоку), я выскочил из стека, чтобы восстановить загадку перед неверным предположением.

Ответы [ 2 ]

2 голосов
/ 23 января 2011

В вашем примере 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);
1 голос
/ 23 января 2011

int ** - это не то же самое, что двумерный массив. Указатель на int test[5][5] будет int (*)[5], поэтому вам нужно stack<int (*)[5]>. Вот хорошее объяснение этого здесь: Массивы и указатели в C .

...