2个类(不使用库中的堆栈)
堆叠和节点
int Stack::pop(void)
{
int ret = 0;
if (top == nullptr)
{
cout<<"Empty";
}
else
{
ret = top->getValue(); //show value
}
return ret;
}
同时在主
cout<< myAlreadyDeclaredStack.pop();
output: Empty0
我的问题是字符串后面会出现0(因为方法需要返回一个int)
任何想法的朋友?
答案 0 :(得分:1)
如果你绝对肯定想要避免例外(虽然我认为它们没有像你想象的那样低效),你可以做一些事情。
如果您的堆栈始终存储int
(或数字)变量,您可以使用预定义的“错误”返回,例如numeric_limits<int>::min()
您可以使用pop()
版本获取变量引用IE bool pop(int& val)
,将val更改为弹出值,如果堆栈为空则返回false。
我确信还有其他解决方案,但这两个想到了。我真的不明白你为什么如此犹豫不决使用异常,他们基本上就是这样的情况。
答案 1 :(得分:0)
if(top!= NULL)
{
ret = top->getVal();
}
else
{
throw "Stack Empty";
}
int main(void)
try
{
cout<< myAlreadyDeclaredStack.pop();
}
catch (const char* msg)
{
cout<< msg <<endl;
}
对我来说似乎很难看,并且每次在方法中处理异常并且主要看起来效率低下。
这是唯一的方式/最有效的方式吗? (毕竟,堆栈是关于速度的)
答案 2 :(得分:0)
这是一个好主意但难以实施
void Stack::isEmpty(void)
{
if (top == nullptr)
cout<<" Empty"
else
top.pop();
}
main
declaredStack.isEmpty(); //wouldn't return a value (to maybe use/manipulate it)
//, just display it --if I set it to display in pop()
//and if I put isEmpty in pop I'm back to having to return a value