声明空堆栈的最有效方法是什么?

时间:2014-10-24 00:27:07

标签: c++ performance stack exit nullptr

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)

任何想法的朋友?

3 个答案:

答案 0 :(得分:1)

如果你绝对肯定想要避免例外(虽然我认为它们没有像你想象的那样低效),你可以做一些事情。

  1. 如果您的堆栈始终存储int(或数字)变量,您可以使用预定义的“错误”返回,例如numeric_limits<int>::min()

  2. 您可以使用pop()版本获取变量引用IE bool pop(int& val),将val更改为弹出值,如果堆栈为空则返回false。

    < / LI>

    我确信还有其他解决方案,但这两个想到了。我真的不明白你为什么如此犹豫不决使用异常,他们基本上就是这样的情况。

答案 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