大家好,我不知道如何正确地标题。我的查询是我所做的堆栈的实现。在代码中我假设我们可以使用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");
}
答案 0 :(得分:4)
void push(T element) {
...
this->push(element);
}
最后一行递归调用push
函数。由于进程永远不会终止,因此您的堆栈溢出异常。
stack::push
是告诉编译器要从父类调用实现的正确方法。