2016-04-10 5 views
0

Я пытаюсь отменить стек (S), используя два других стека (S1 и S2). Это код, который я пытаюсь:C++ Реверсирование стека с использованием двух дополнительных стеков

#include <iostream> 
#include <stack> 

using namespace std; 

int main() 
{ 
    stack<int> S, S1, S2; 
    S.push(1), S.push(2), S.push(3); 

    cout << "The top element of S is: " << S.top() << endl; 

    while (!S.empty()) { 
     S1.push(S.pop()); 
    } 
    while (!S1.empty()) 
     S2.push(S1.pop()); 
    while (!S2.empty()) 
     S.push(S2.pop()); 

    cout << "The top element of S is now: " << S.top() << endl; 

    return 0; 
} 

Это ошибка, я получаю (x3) каждый раз я называю поп внутри толчка. - stack.cc:14:11: ошибка: Ссылка на тип «константный value_type» (он же «Const INT») не может связываться с RValue типа «пустот» S1.push(S.pop());

Я попытался присваивая значение выскочил к переменной, а затем вызов push с этой переменной, но она также не увенчалась успехом.

Любая помощь будет оценена!

+2

Возможно, вы захотите прочитать некоторую справочную документацию перед использованием любых функций библиотеки: ['std :: stack :: pop()'] (http://en.cppreference.com/w/cpp/container/stack/pop) возвращает 'void'. Другое дело, что вам действительно не нужны два стека, чтобы перевернуть стек. Кроме того, вещь, которая может показаться странной, - это неправильное использование [оператора запятой] (http://stackoverflow.com/questions/54142/how-does-the-comma-operator-work). Убедитесь, что вы готовы перейти к кодированию, взяв обновление C++ из [проверенного источника] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Drop

+0

RTFM , Не догадывайтесь. –

ответ

4

Вы должны написать

S1.push(S.top()); 
S.pop(); 

std::stack::pop() имеет тип void возврата.

+0

Спасибо! Вы знаете, почему это создало бы ошибку сегментации? – Brittany

+0

@Brittany Нет, это другая проблема, и вам нужно задать отдельный вопрос об этом. Не пропустите, чтобы предоставить [MCVE]. –

1

pop() не возвращает значение, извлеченное из стека. pop() возвращает void. pop() удаляет значение из стека и ничего не делает.

Вам нужно прочитать значение в верхней части стека, используя top(), а затем позвонить pop().

Смежные вопросы