1

我正在用 C++ 编写一个队列(我不应该使用 STL)。我的 dequeue 函数需要返回它从队列中删除的整数。但是,如果队列为空,它应该返回什么?我应该抛出一个异常,如果是,是哪个?或者我应该返回 null (但这不会令人困惑,因为它本质上是零并让它看起来像我返回 0)?

任何帮助将不胜感激。

4

3 回答 3

2

抛出异常似乎是最合适的,因为用户应该总是知道队列中还有一个元素,或者首先通过调用来检查它.empty()(假设你确实有这样的方法)。

对于您抛出什么异常的问题:std::logic_error对我来说似乎合适,使用“what”-string 来指向您的类的名称、调用的方法以及队列为空。

于 2013-10-30T22:14:46.713 回答
1

你有三个选择:

我喜欢第一个选项,因为它在类型级别明确表示值不能存在,而第二个和第三个选项更多的是在文档/合同级别,编译器无法轻松验证。

于 2013-10-30T22:13:14.627 回答
0

标准版本stackqueue拆分访问下一个元素和删除它们的功能:

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)依赖于底层容器(您可以指定),并且如果在空容器上调用它们通常具有未定义的行为。

所以,如果你想按照标准的方法来做,你可以简单地说在空容器上调用它是未定义的。如果没有,你可以做任何你想做的事(也许是你前女友的电话号码?)。

于 2013-10-30T22:44:07.027 回答