我想知道如何在 top 变量达到值 -1(没有要弹出的元素)时应用异常处理 .目前,我正在使用 cout 通知用户有关堆栈下溢 并返回 0,这不是一个好的做法。这个pop函数整体上可以做哪些改进,堆栈下溢时如何通知用户和处理异常。
int Mystack::pop()
{
if (isEmpty())
{
std::cout << "Stack Underflow" << std::endl;
}
else
{
std::cout << "The popped element is" << A[top];
return A[top--];
}
return 0;
}
主要部分:
case 4:
std::cout << "POP the element" << std::endl;
s1.pop();
break;
最佳答案
你可以抛出一个out_of_range
异常:
#include <stdexcept>
int Mystack::pop()
{
if (isEmpty())
throw std::out_of_range("Stack Underflow");
std::cout << "The popped element is" << A[top];
return A[top--];
}
在客户端:
void foo()
{
Mystack ms;
//...
try
{
ms.pop();
}
catch (const std::out_of_range& oor)
{
std::cerr << "Out of Range error: " << oor.what() << '\n';
}
}
编辑:正如下面提到的评论,您还可以从 std::exception
派生您自己的异常。这是一个简单的例子:
#include <stdexcept>
struct myStackException : public std::exception
{
const char *what() const noexcept { return "Stack Overflow"; }
};
int Mystack::pop()
{
if (isEmpty())
throw myStackException();
std::cout << "The popped element is" << A[top];
return A[top--];
}
实时(虚拟)示例:http://ideone.com/ZyqiQ0
关于c++ - 在堆栈中执行 POP 时下溢的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716204/