C++中的模板类是一种可以生成通用类型对象的类模板。模板类可以用来创建多种数据类型,其类型由一种或多种类型参数指定。它们在编写可重用和通用代码方面非常有用,因为它们可以在不重复编写代码的情况下支持多种数据类型。
下面是一个简单的示例:一个模板类Stack,该类用于存储任何数据类型的值,并允许使用压栈和弹出操作对其进行操作。
template <typename T>
class Stack {
private:
T* stackArray; // 存储元素的数组
int stackSize; // 堆栈的大小
int top; // 栈顶元素的索引
public:
// 构造函数
Stack(int size) {
stackArray = new T[size];
stackSize = size;
top = -1;
}
// 压入栈顶
void push(T value) {
if(top == stackSize-1) {
throw runtime_error("Stack is full");
}
top++;
stackArray[top] = value;
}
// 弹出栈顶
T pop() {
if(top == -1) {
throw runtime_error("Stack is empty");
}
T result = stackArray[top];
top--;
return result;
}
// 判断栈是否为空
bool isEmpty() {
return top == -1;
}
// 打印栈顶元素
void printTop() {
if(top == -1) {
cout << "Stack is empty" << endl;
return;
}
cout << "Top element is: " << stackArray[top] << endl;
}
// 析构函数
~Stack() {
delete [] stackArray;
}
};
在上面的代码中,我们使用了一个类型参数T,它可以用来指定元素类型。我们还定义了一个若干个函数用于执行常见的堆栈操作,包括push、pop、isEmpty等。
下面是一个用于演示的示例代码。我们将Stack类实例化为Stack
int main() {
// 实例化一个Stack<int> 类型
Stack<int> intStack(5);
// 将数值1, 2, 3, 4, 5入栈
for(int i=1; i<=5; i++) {
intStack.push(i);
}
// 弹出栈顶元素,应该是数值5
int popped = intStack.pop();
cout << "Popped value: " << popped << endl;
// 打印栈顶元素,应该是数值4
intStack.printTop();
// 将数值6入栈
intStack.push(6);
// 打印栈顶元素,应该是数值6
intStack.printTop();
return 0;
}
上面的示例演示了如何创建一个带有整数类型的Stack实例,但是我们也可以实例化Stack类来支持其他数据类型,例如:
Stack<double> doubleStack(10); // 带有double类型的堆栈实例
Stack<string> stringStack(10); // 带有字符串类型的堆栈实例
通过使用模板类,我们可以轻松地创建通用代码,以支持多种数据类型。