1

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)

有什么想法的朋友吗?

4

3 回答 3

1

如果您绝对肯定想要避免异常(尽管我认为它们并不像您认为的那样低效),您可以做几件事。

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

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

我敢肯定还有其他解决方案,但我想到了这两个。不过,我真的不明白您为什么如此犹豫使用异常,它们基本上适用于这种情况。

于 2014-10-24T01:31:54.740 回答
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
于 2014-10-24T01:13:55.023 回答
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;
 }

对我来说似乎很难看,并且每次都必须在方法中和主要处理异常似乎效率低下。

这是唯一的方法/最有效的方法吗?(毕竟堆栈是关于速度的)

于 2014-10-24T00:34:35.553 回答