tan*_*anz 2 c++ algorithm stack
我想知道当top变量达到-1时没有应用异常处理(没有元素留给pop).目前,我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
主要部分:
case 4:
std::cout << "POP the element" << std::endl;
s1.pop();
break;
Run Code Online (Sandbox Code Playgroud)
你可以抛出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--];
}
Run Code Online (Sandbox Code Playgroud)
在客户端:
void foo()
{
Mystack ms;
//...
try
{
ms.pop();
}
catch (const std::out_of_range& oor)
{
std::cerr << "Out of Range error: " << oor.what() << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如下面提到的评论,您也可以从中派生自己的例外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--];
}
Run Code Online (Sandbox Code Playgroud)
实时(虚拟)示例:http://ideone.com/ZyqiQ0