如果队列为空,应该返回什么

时间:2013-10-30 22:10:44

标签: c++ queue

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

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

对于你抛出的异常的问题:std::logic_error似乎适合我,使用“what”-string指向你的类名,调用的方法和队列是空的。

答案 1 :(得分:1)

您有三种选择:

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

答案 2 :(得分:0)

标准版stackqueue分割了访问 next 元素并删除它们的功能:

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的{​​{1}}和back函数依赖于底层容器(您可以指定),如果调用它们通常具有未定义的行为一个空容器。

因此,如果您想按照标准的方法执行此操作,您可以简单地说,在空容器上调用它是未定义的。如果没有,你可以做任何你想做的事情(可能会给你前女友的电话号码?)。