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

标签 c++ c data-structures

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

在 C++ 中设计堆栈时,pop() 方法(或 front() 方法)在堆栈为空时应该返回什么?以下哪个设计更好?

  1. 抛出异常
  2. 未定义,但需要用户调用 isempty() 方法在调用 pop()
  3. 之前进行检查
  4. 返回一个 bool 代码,同时使用一个额外的参数(引用)来传递弹出的元素
  5. 定义一个唯一的空元素

好的,我看到我的问题不是很清楚,让我尝试重写它:

有一些数据结构可以基于链表实现,如堆栈、队列,它们中的每一个都有一个返回前端元素(或尾部)的方法。

我想知道,在数据为空的情况下,有没有设计这种方法的原则指导。

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

最佳答案

按契约编程的风格是,有一个非空堆栈是调用 pop 的一个前提,并且调用一个方法而不满足其前提条件有未定义结果。我的实现会抛出一个std::logic_error,但这不是必需的。在 C 中,我的实现将通过 assert abort

pop的调用者负责在调用pop之前保证栈不为空的前提条件成立。因此堆栈应该有一个 isEmpty 方法供调用者检查。

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

相关文章:

c++ - 非常奇怪的卡在 for 循环初始化

data-structures - 国际象棋棋盘所需的最少位数

c++ - 如何有选择地启用或禁用项目中整个(外部项目)目录的 -Werror 参数?

php - 在 C++ 中为 PHP 制作脚本

检查 double 是否等于 -0.00

c - 存储特定位数所需的字节数

c++ - read was not declared 错误信息

c - 如何在scanf中输入任意类型的数据类型?

c - C中有向图中的DFS遍历

c++ - 你能 static_assert 一个元组只有一种类型满足特定条件吗?