我正在用C ++编写一个队列(我不应该使用STL)。我的dequeue函数需要返回它从队列中删除的整数。但是,如果队列为空,它应该返回什么?我应该抛出一个例外吗?如果是这样的话?或者我应该返回null(但这可能不会令人困惑,因为它基本上为零并使它看起来像我正在返回0)?
非常感谢任何帮助。
答案 0 :(得分:2)
抛出异常似乎是最合适的,因为用户应该始终知道队列中还有一个元素,或者先调用.empty()
来检查它(假设你确实有这样的方法)。
对于你抛出的异常的问题:std::logic_error
似乎适合我,使用“what”-string指向你的类名,调用的方法和队列是空的。
答案 1 :(得分:1)
您有三种选择:
boost::optional<T> pull()
返回boost::none
。std::out_of_range
或类似的例外情况。我喜欢第一个选项,因为它在类型级别明确表示某个值可能不存在,而第二个和第三个选项更多地位于文档/合同级别,编译器无法轻易验证。
答案 2 :(得分:0)
标准版stack
和queue
分割了访问 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
函数依赖于底层容器(您可以指定),如果调用它们通常具有未定义的行为一个空容器。
因此,如果您想按照标准的方法执行此操作,您可以简单地说,在空容器上调用它是未定义的。如果没有,你可以做任何你想做的事情(可能会给你前女友的电话号码?)。