我正在用 C++ 编写一个队列(我不应该使用 STL)。我的 dequeue 函数需要返回它从队列中删除的整数。但是,如果队列为空,它应该返回什么?我应该抛出一个异常,如果是,是哪个?或者我应该返回 null (但这不会令人困惑,因为它本质上是零并让它看起来像我返回 0)?
任何帮助将不胜感激。
抛出异常似乎是最合适的,因为用户应该总是知道队列中还有一个元素,或者首先通过调用来检查它.empty()
(假设你确实有这样的方法)。
对于您抛出什么异常的问题:std::logic_error
对我来说似乎合适,使用“what”-string 来指向您的类的名称、调用的方法以及队列为空。
你有三个选择:
boost::optional<T> pull()
则返回。boost::none
std::out_of_range
或一些类似的异常。我喜欢第一个选项,因为它在类型级别明确表示值不能存在,而第二个和第三个选项更多的是在文档/合同级别,编译器无法轻松验证。
标准版本stack
和queue
拆分访问下一个元素和删除它们的功能:
stack<int> s;
// put some stuff in s
int i = s.top; // gets the top element
s.pop(); // removes the element you just retrieved in the previous operation
这允许pop()
在空容器上调用(并且什么都不做)。top
(或front
和a的back
函数queue
)依赖于底层容器(您可以指定),并且如果在空容器上调用它们通常具有未定义的行为。
所以,如果你想按照标准的方法来做,你可以简单地说在空容器上调用它是未定义的。如果没有,你可以做任何你想做的事(也许是你前女友的电话号码?)。