完善:#include <iostream> using namespace std; enum ERROR{UnderFlow,OverFlow}; template<typename T> class StackTemplate { enum { ssize = 100 }; T stack[ssize]; int top; public: StackTemplate() : top(0) {} void push(const T& i) { if (top >= ssize) ; stack[top++] = i; } T pop() { if ( ) throw UnderFlow; return ; } int size() const { return top; } }; int fibonacci(int n); int main() { { is; for(int i = 0; i < 20; i++) is.push(fibonacci(i)); for(int k = 0; k < 20; k++) cout << is.pop() << "\t"; } catch( ERROR e ) { switch( ) { case OverFlow: exit; case UnderFlow: exit; } } catch(...) { exit; } return 0; } int fibonacci(int n) { int sz = 100; int i; static int f[sz]; if (n >= sz) ; f[0] = f[1] = 1; for(i = 0; i < sz; i++) if(f[i] == 0) break; while(i <= n) { = f[i-1] + f[i-2]; i++; } return ; }
时间: 2024-03-20 12:44:21 浏览: 62
下面是完整代码的修改和解释:
```c++
#include <iostream>
using namespace std;
enum ERROR{UnderFlow, OverFlow};
template<typename T>
class StackTemplate {
enum { ssize = 100 };
T stack[ssize];
int top;
public:
StackTemplate() : top(0) {}
void push(const T& i) {
if (top >= ssize) throw OverFlow; // 如果栈已满,抛出OverFlow异常
stack[top++] = i;
}
T pop() {
if (top <= 0) throw UnderFlow; // 如果栈为空,抛出UnderFlow异常
return stack[--top];
}
int size() const {
return top;
}
};
int fibonacci(int n);
int main() {
try {
StackTemplate<int> is; // 创建一个int类型的栈
for(int i = 0; i < 20; i++) {
is.push(fibonacci(i)); // 将斐波那契数列压入栈中
}
for(int k = 0; k < 20; k++) {
cout << is.pop() << "\t"; // 从栈中弹出元素并输出
}
}
catch(ERROR e) { // 捕获ERROR类型的异常
switch(e) {
case OverFlow:
cout << "Stack overflow\n";
break;
case UnderFlow:
cout << "Stack underflow\n";
break;
}
}
catch(...) { // 捕获所有类型的异常
cout << "Unknown exception caught\n";
}
return 0;
}
int fibonacci(int n) {
int sz = 100;
int i;
static int f[sz];
if (n >= sz) throw OverFlow; // 如果n超出了数组f的长度,抛出OverFlow异常
f[0] = f[1] = 1;
for(i = 0; i < sz; i++)
if(f[i] == 0) break;
while(i <= n) {
f[i] = f[i-1] + f[i-2];
i++;
}
return f[n]; // 返回斐波那契数列中第n个数
}
```
本程序实现了一个使用模板类实现的栈,并将斐波那契数列压入栈中。在程序运行过程中,如果栈已满或为空,分别抛出`OverFlow`和`UnderFlow`异常。在`main()`函数中,我们使用`try-catch`语句来捕获这些异常,如果发生异常,就根据异常类型进行相应的处理。同时,我们还添加了一个`catch`语句来捕获所有类型的异常,防止程序因为未捕获的异常而崩溃。
需要注意的是,在捕获异常时,我们使用了`enum`类型的`ERROR`来表示异常类型。在`catch`语句块中,我们根据异常类型进行相应的处理。如果抛出的异常类型不属于`ERROR`枚举类型,就会被第二个`catch`语句块捕获。
阅读全文