继承自堆栈类

时间:2016-10-29 20:20:26

标签: c++

大家好,我不知道如何正确地标题。我的查询是我所做的堆栈的实现。在代码中我假设我们可以使用this-> push()或this-> pop()但是需要范围操作符(stack :: push)..我不明白为什么?

#include <iostream>
#include <stack>


template <class T >
class SpecialStack : std::stack<T>
{

public:

    SpecialStack() : isEmpty(true) {};

    void push(T element)
    {
        if (!isEmpty)
        {
            T LastMin = min_stack.top();

            if (element < LastMin)
            {
                min_stack.push(element);
            }
            else
            {
                min_stack.push(LastMin);
            }
        }else
        {
            min_stack.push(element);

        }
        stack::push(element); // works
        //this->push(element); // Unhandled Exception
    }

    T pop()
    {
        min_stack.pop();
        T out = stack::top();
        stack::pop();
        return out;

    }

    T getMin()
    {
        return min_stack.top();

    }
private:

    std::stack<T> min_stack;

    bool isEmpty;

};


int main()
{
    SpecialStack<int> s;
    s.push(3);
    s.push(2);
    s.push(1);
    s.push(5);
    s.push(6);
    //cout << s.getMin() << endl;

    s.pop();
    s.pop();
    s.pop();

    std::cout << s.getMin() << std::endl;

    system("pause");




}

1 个答案:

答案 0 :(得分:4)

void push(T element) {
   ...
   this->push(element);
}

最后一行递归调用push函数。由于进程永远不会终止,因此您的堆栈溢出异常。

stack::push是告诉编译器要从父类调用实现的正确方法。