模板类与函数
发布人:shili8
发布时间:2024-11-15 11:04
阅读次数:0
**模板类与函数**
在C++中,模板(Template)是指可以根据类型参数自动生成代码的机制。模板类(Class Template)和函数(Function Template)是C++编程中的重要概念,它们使得我们能够写出通用的、类型安全的代码。
### 模板类模板类是一种特殊的类,它可以根据类型参数自动生成代码。在使用模板类时,我们需要指定类型参数,这样就能生成相应的代码。
#### 示例:模板类Stack
cpptemplate <typename T>
class Stack {
private:
T* data;
int size;
public:
// 构造函数 Stack(int capacity) : size(0), data(new T[capacity]) {}
// 销毁函数 ~Stack() { delete[] data; }
// 入栈函数 void push(T value) {
if (size ==0) {
data[size++] = value;
} else {
T* temp = new T[size +1];
for (int i =0; i < size; ++i) {
temp[i] = data[i];
}
delete[] data;
data = temp;
data[size++] = value;
}
}
// 出栈函数 T pop() {
if (size ==0) {
throw std::out_of_range("Stack is empty");
} else {
return data[--size];
}
}
// 查看顶部元素函数 T top() const {
if (size ==0) {
throw std::out_of_range("Stack is empty");
} else {
return data[size -1];
}
}
// 是否为空函数 bool isEmpty() const { return size ==0; }
};
#### 示例:模板类Vector
cpptemplate <typename T>
class Vector {
private:
T* data;
int capacity;
int size;
public:
// 构造函数 Vector(int initialCapacity =1) : capacity(initialCapacity), size(0), data(new T[capacity]) {}
// 销毁函数 ~Vector() { delete[] data; }
// 扩容函数 void resize(int newCapacity) {
if (newCapacity < size) {
throw std::out_of_range("New capacity is less than current size");
} else {
T* temp = new T[newCapacity];
for (int i =0; i < size; ++i) {
temp[i] = data[i];
}
delete[] data;
data = temp;
capacity = newCapacity;
}
}
// 添加元素函数 void push_back(T value) {
if (size == capacity) {
resize(capacity *2);
}
data[size++] = value;
}
// 删除最后一个元素函数 T pop_back() {
if (size ==0) {
throw std::out_of_range("Vector is empty");
} else {
return data[--size];
}
}
// 查看最后一个元素函数 T back() const {
if (size ==0) {
throw std::out_of_range("Vector is empty");
} else {
return data[size -1];
}
}
// 是否为空函数 bool isEmpty() const { return size ==0; }
};
### 模板函数模板函数是一种特殊的函数,它可以根据类型参数自动生成代码。在使用模板函数时,我们需要指定类型参数,这样就能生成相应的代码。
#### 示例:模板函数max
cpptemplate <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
#### 示例:模板函数swap
cpptemplate <typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
### 总结在本文中,我们学习了C++中的模板类和函数。模板类是一种特殊的类,它可以根据类型参数自动生成代码。在使用模板类时,我们需要指定类型参数,这样就能生成相应的代码。模板函数是一种特殊的函数,它也可以根据类型参数自动生成代码。在使用模板函数时,我们同样需要指定类型参数。这两种机制使得我们能够写出通用的、类型安全的代码,极大地提高了编程效率和代码质量。

