Possible Duplicate:
C++ STL stack question: Why does pop() not throw an exception if the stack is empty?
在 C++ 中设计堆栈时,pop() 方法(或 front() 方法)在堆栈为空时应该返回什么?以下哪个设计更好?
- 抛出异常
- 未定义,但需要用户调用 isempty() 方法在调用 pop() 之前进行检查
- 返回一个 bool 代码,同时使用一个额外的参数(引用)来传递弹出的元素
- 定义一个唯一的空元素
好的,我看到我的问题不是很清楚,让我尝试重写它:
有一些数据结构可以基于链表实现,如堆栈、队列,它们中的每一个都有一个返回前端元素(或尾部)的方法。
我想知道,在数据为空的情况下,有没有设计这种方法的原则指导。
而我对更好的定义是“正确使用容易,错误使用困难”。
最佳答案
按契约编程的风格是,有一个非空堆栈是调用 pop
的一个前提,并且调用一个方法而不满足其前提条件有未定义结果。我的实现会抛出一个std::logic_error
,但这不是必需的。在 C 中,我的实现将通过 assert
abort
。
pop
的调用者负责在调用pop
之前保证栈不为空的前提条件成立。因此堆栈应该有一个 isEmpty
方法供调用者检查。
关于c++ - 当堆栈为空时, 'pop()' 方法应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390126/