c++ - 当堆栈为空时, 'pop()'方法应该返回什么?

标签 c++ c data-structures

这个问题已经在这里有了答案:




9年前关闭。




Possible Duplicate:
C++ STL stack question: Why does pop() not throw an exception if the stack is empty?



在C++中设计堆栈时,堆栈为空时, pop()方法(或 front()方法)应返回什么?以下哪个设计更好?
  • 引发异常
  • 未定义,但是要求用户调用 isempty()方法进行检查,然后再调用 pop()
  • 返回 bool(boolean) 代码,同时使用额外的参数(引用)传递 pop 元素
  • 定义唯一的空元素


  • 好的,我发现我的问题不清楚,让我尝试重写它:

    有一些数据结构可以基于链接列表来实现,例如堆栈,队列,并且每个结构都有返回前元素(或尾元素)的方法。

    我想知道,关于数据为空的情况,设计这种方法是否有任何原则性指南。

    我对更好的定义是“易于正确使用而难以错误使用”。

    最佳答案

    按契约(Contract)编程的样式将是具有非空堆栈是调用pop的前提,而在不满足其前提条件的情况下调用方法会产生不确定的结果。我的实现将抛出std::logic_error,但这不是必需的。在C语言中,我的实现将通过abort进行assertpop的调用者负责确保在调用pop之前保持堆栈不为空的前提。因此,堆栈应具有isEmpty方法供调用者检查。

    关于c++ - 当堆栈为空时, 'pop()'方法应该返回什么? ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827006/

    相关文章:

    c++ - 扩展外部应用程序的菜单

    Python 响应数据类型 - 如何访问数据

    algorithm - 查询: filter by A,的数据结构/算法按B排序,返回N个结果

    python - 是否有一种数据类型/结构可以 : hold a list of numbers, 是可散列的、无序的并且允许重复

    c++ - 控制如何将参数从子类构造函数声明发送到父类(super class)构造函数 (C++)

    开源项目中的 C++ 类设计模式

    c++ - 使用未覆盖函数的中间派生类在多级继承中覆盖

    c - 移动内存页面的方法比 mremap() 更快?

    c - 结构体指针 结构体指针

    c - FD_CLOEXEC fcntl() 标志有什么作用?