我正在尝试实现类minStack来跟踪Stack的最小元素。以下是我的代码。我试图使用基类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!
}
};
答案 0 :(得分: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) { /* ... */ }
};