C ++使用两个额外的堆栈来反转堆栈

时间:2016-04-10 03:20:39

标签: c++ stack reverse

我正在尝试使用另外两个堆栈(S1和S2)来反转堆栈(S)。这是我正在尝试的代码:

#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;
}

这是每次从内部调用pop时我得到的错误(x3)。 - stack.cc:14:11:错误:类型'const value_type'(又名'const int')的引用无法绑定到'void'S1.push(S.pop());

类型的右值

我尝试将弹出的值赋给变量,然后用该变量调用push,但它也不成功。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

你应该写

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

std::stack::pop()的回复类型为void

答案 1 :(得分:1)

pop()不会返回从堆栈中弹出的值。 pop()会返回voidpop()从堆栈中删除值,不执行任何其他操作。

您需要使用top()读取堆栈顶部的值,然后调用pop()