结合类模板知识,定义一个通用栈(先进后出)类并加以实现,编写主函数进行测试
时间: 2024-02-25 10:55:12 浏览: 66
好的,我可以帮您实现这个类。以下是通用栈类的定义和实现,以及一个简单的测试主函数:
```c++
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class Stack {
private:
vector<T> data;
public:
void push(T val) {
data.push_back(val);
}
T pop() {
if (data.empty()) {
throw out_of_range("Stack is empty");
}
T val = data.back();
data.pop_back();
return val;
}
T top() {
if (data.empty()) {
throw out_of_range("Stack is empty");
}
return data.back();
}
bool empty() {
return data.empty();
}
int size() {
return data.size();
}
};
int main() {
Stack<int> my_stack;
my_stack.push(1);
my_stack.push(2);
my_stack.push(3);
cout << "Size of stack: " << my_stack.size() << endl;
cout << "Top of stack: " << my_stack.top() << endl;
cout << "Popping top element: " << my_stack.pop() << endl;
cout << "Top of stack: " << my_stack.top() << endl;
cout << "Is stack empty? " << my_stack.empty() << endl;
cout << "Popping top element: " << my_stack.pop() << endl;
cout << "Popping top element: " << my_stack.pop() << endl;
cout << "Is stack empty? " << my_stack.empty() << endl;
// Uncomment the following line to test exception handling
// cout << "Popping top element: " << my_stack.pop() << endl;
return 0;
}
```
在上面的代码中,我们定义了一个通用栈类 `Stack`,这个类使用了一个 `vector` 来存储栈中的元素。该类有五个基本的操作:push(将元素压入栈顶)、pop(弹出栈顶元素)、top(返回栈顶元素)、empty(判断栈是否为空)和size(返回栈的大小)。
在主函数中,我们创建了一个 `Stack<int>` 类型的对象 `my_stack`,并使用了这些操作来测试栈的功能。我们首先将整数 1、2 和 3 压入栈中,然后分别输出栈的大小、栈顶元素,弹出栈顶元素,再次输出栈顶元素,判断栈是否为空,以及弹出所有元素后再次判断栈是否为空。在程序的最后,我们还可以测试异常处理,通过尝试弹出空栈的元素来触发 `out_of_range` 异常。
希望这个程序能够满足您的需求!
阅读全文