2013-10-30 83 views
0

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

任何帮助将不胜感激。

+2

这取决于你!您可以与用户签订一份合同,该合同只能在非空队列上完成,并在队列为空时擦除硬盘。 –

回答

1

你有三个选择:

我喜欢的第一选择,因为它使得有明确的在型水平,一个值可以是不存在,而第二和第三选项是更在文档/收缩水平,不能用很容易被编译器验证。

+0

它通常被称为'pop'。 :) – avakar

+0

@avakar IME'pop','pull'和'dequeue'都发生了。这是一个风格问题。 – rightfold

+0

如果boost不是一个选项,你也可以使用'std :: pair ',这个对的'.second'值指示第一个是否有效。 –

2

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

对于你扔什么异常问题:std::logic_error似乎是适当的我,用“什么” -string指向你的类的名字,叫做方法和队列是空的。

+0

我认为'std :: runtime_error'更适用于无法预测和避免错误情况的场合;如果'.empty()'是避免错误的可靠方法,'std :: logic_error'似乎更合适。 – DanielKO

+0

@DanielKO你是对的,谢谢。修正了答案,并添加了一些关于在异常消息中放置什么的提示。 –

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()一个空的容器被称为(什么都不做)。对于queuetop(或frontback函数)依赖于底层容器(您可以指定),如果在空容器上调用它们,通常会有未定义的行为。

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

相关问题