1

我正在尝试实现类 minStack 来跟踪堆栈的最小元素。以下是我的代码。我尝试使用基类Stack的指针,因为我需要更新原始堆栈,但我不知道如何调用它,因为它是基类的指针而不是基类的成员。

class minStack: public Stack{
private:
    Stack* minS;
public:
    int min()const{
        if(minS->top)
            return minS->top->data;
        return -1;
    }
    minStack(){
        minS = new Stack();
    }
    int pop(){
        if (Stack::this->pop == min()) {   //question here!
            minS->pop();
        }
    }
    void push(int item){
        if(item <= min()){
            minS->push(item);
        }
        Stack::this->push();  //question here!
    }
};
4

1 回答 1

6

您可以调用Stack::pop()Stack::push()调用基类的函数:

int pop()
{
    if (Stack::pop() == min()) { minS->pop(); }
}

void push(int item)
{
    if (item <= min())
    {
        minS->push(item);
    }
    Stack::push(item);
}

一条不相关的建议:通常不会从容器派生来制作像您这样的容器适配器。通常你会与成员组成你的班级:

class min_stack
{
    std::stack<int> stack_;
    std::stack<int> min_;
public:
    int pop() { /* ... */ }
    void push(int n) { /* ... */ }
};
于 2013-10-26T15:35:00.540 回答