c++ - 在堆栈中执行 POP 时下溢的异常处理

标签 c++ algorithm stack

我想知道如何在 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/

相关文章:

string - Xcode 字符串搜索算法

algorithm - 我想运行一个具有指定假设的监督学习算法,该假设的参数 theta 处于异常位置

c++ - 从 C++ 调用 python eval

c++ - 用 C++ 进行宾果测试

python - 如何在不强制和/或花费大量计算时间的情况下解决这个问题?

java - 我如何在 Java 中使这些数据结构实现通用?

assembly - 使用 gdb 的堆栈地址

java - 堆栈中的push(int[][])复制相同的值Java

C++ 期望主表达式在 "int"之前

c++ - OpenGL - 从 DisplayList 转换为使用 VBO