我正在尝试实现类 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!
}
};
最佳答案
可以调用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)成员:
class min_stack
{
std::stack<int> stack_;
std::stack<int> min_;
public:
int pop() { /* ... */ }
void push(int n) { /* ... */ }
};
关于c++ - C++ 获取基类指针的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608489/