【发布时间】:2015-06-22 15:11:29
【问题描述】:
我正在用 C++ 实现一个通用堆栈(带有一个数组),并且对在这种情况下返回什么感到困惑:
template <class T>
T Stack<T>::pop(void) {
if (size != 0) {
return items[size - 1];
size--;
} else {
cerr << "Cannot pop from empty stack." << endl;
return ???;
}
}
template <class T>
T Stack<T>::peek(void) {
if (size != 0)
return items[size - 1];
else {
cerr << "Cannot peek from empty stack." << endl;
return ???;
}
}
我在这里有什么选择?我认为做一些事情会很麻烦,比如声明一个新的 T 变量并返回它。我在画一个空白。
【问题讨论】:
-
抛出异常?
-
注意:
return之后的语句无法访问 - 具体来说,size--;行将不会运行! -
@SanderDeDycker 是的,那是个意外。已经修好了
-
std实现抛出异常,您还可以返回pair和bool以表示成功和实际元素(如果为空则默认构造)。另外,不要使用数组,使用vector或deque -
@imreal。即使在容器的用户没有犯这个错误的情况下,这也会强制 T 成为默认可构造的。也许返回
pair<bool, optional<T>>或类似的。
标签: c++ templates generic-programming