编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据操作。并在主函数中测试创建整数栈、字符栈和浮点数栈,并提供一些数据展示入栈、出栈和打印操作。
时间: 2023-04-26 14:06:16 浏览: 284
以下是一个栈的类模板的定义,它可以为任何类型的对象提供栈结构数据操作:
```
template<typename T>
class Stack {
private:
std::vector<T> data; // 使用 vector 存储栈中的元素
public:
void push(const T& item) { // 入栈操作
data.push_back(item);
}
T pop() { // 出栈操作
if (data.empty()) {
throw std::out_of_range("Stack is empty");
}
T item = data.back();
data.pop_back();
return item;
}
bool empty() const { // 判断栈是否为空
return data.empty();
}
void print() const { // 打印栈中的元素
std::cout << "Stack: ";
for (const T& item : data) {
std::cout << item << " ";
}
std::cout << std::endl;
}
};
```
在主函数中,我们可以使用该类模板创建整数栈、字符栈和浮点数栈,并进行一些数据展示入栈、出栈和打印操作,例如:
```
int main() {
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
intStack.print(); // 输出:Stack: 1 2 3
intStack.pop();
intStack.print(); // 输出:Stack: 1 2
Stack<char> charStack;
charStack.push('a');
charStack.push('b');
charStack.push('c');
charStack.print(); // 输出:Stack: a b c
charStack.pop();
charStack.print(); // 输出:Stack: a b
Stack<float> floatStack;
floatStack.push(1.1);
floatStack.push(2.2);
floatStack.push(3.3);
floatStack.print(); // 输出:Stack: 1.1 2.2 3.3
floatStack.pop();
floatStack.print(); // 输出:Stack: 1.1 2.2
return 0;
}
```
阅读全文