【发布时间】:2011-11-15 10:47:30
【问题描述】:
可能重复:
C++ STL stack question: Why does pop() not throw an exception if the stack is empty?
在 C++ 中设计堆栈时,pop() 方法(或 front() 方法)在堆栈为空时应该返回什么?以下哪个设计更好?
- 抛出异常
- 未定义,但需要用户调用 isempty() 方法在调用 pop() 之前进行检查
- 返回一个布尔代码,同时使用一个额外的参数(引用)来传递弹出的元素
- 定义一个唯一的空元素
好的,我看到我的问题不是很清楚,让我尝试重写它:
有一些数据结构可以基于链表实现,如堆栈、队列,它们中的每一个都有一个返回前端元素(或尾部)的方法。
我想知道,在数据为空的情况下,有没有设计这种方法的原则指导。
而我对更好的定义是“正确使用容易,错误使用困难”。
【问题讨论】:
-
定义“更好”。哪一个满足用户最小惊喜原则?
-
无法回答。这取决于代码库其余部分的策略。
-
您可能还想考虑效率。在每个弹出窗口中检查空堆栈对某些人来说可能过于昂贵。所以一种选择是有两个函数,一个抛出,另一个是 UB(如 std.:vector)
-
如果你的堆栈是低级的/应用程序内部的,我不会让它太友好,因为这意味着一个错误。
-
如果这是明确的 C++ 根据问题为什么它也有 C 标签?
标签: c++ c data-structures