函数模板
函数模板可定义一个通用的函数,它能处理多种不同的数据类型。其语法格式如下:
cpp
template <typename T>
返回类型 函数名(参数列表) {
// 函数体
}
下面是一个简单的交换两个变量值的函数模板示例:
cpp
#include <iostream>
// 定义一个函数模板用于交换两个变量的值
template <typename T>
void swapValues(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int num1 = 10, num2 = 20;
std::cout << "Before swap: num1 = " << num1 << ", num2 = " << num2 << std::endl;
swapValues(num1, num2);
std::cout << "After swap: num1 = " << num1 << ", num2 = " << num2 << std::endl;
double d1 = 1.5, d2 = 2.5;
std::cout << "Before swap: d1 = " << d1 << ", d2 = " << d2 << std::endl;
swapValues(d1, d2);
std::cout << "After swap: d1 = " << d1 << ", d2 = " << d2 << std::endl;
return 0;
}
在上述代码中,`swapValues` 函数模板可以处理不同类型的变量,比如 `int` 和 `double`。
类模板
类模板允许你定义一个通用的类,这个类可以处理不同的数据类型。其语法格式如下:
cpp
template <typename T>
class 类名 {
// 类的成员
};
下面是一个简单的栈类模板示例:
cpp
#include <iostream>
#include <vector>
// 定义一个栈类模板
template <typename T>
class Stack {
private:
std::vector<T> elements;
public:
// 入栈操作
void push(const T& value) {
elements.push_back(value);
}
// 出栈操作
void pop() {
if (!elements.empty()) {
elements.pop_back();
}
}
// 获取栈顶元素
T top() const {
if (!elements.empty()) {
return elements.back();
}
throw std::out_of_range("Stack is empty");
}
// 判断栈是否为空
bool empty() const {
return elements.empty();
}
};
int main() {
Stack<int> intStack;
intStack.push(10);
intStack.push(20);
std::cout << "Top element of intStack: " << intStack.top() << std::endl;
intStack.pop();
std::cout << "Top element of intStack after pop: " << intStack.top() << std::endl;
Stack<double> doubleStack;
doubleStack.push(1.5);
doubleStack.push(2.5);
std::cout << "Top element of doubleStack: " << doubleStack.top() << std::endl;
return 0;
}
在这个代码中,`Stack` 类模板能够处理不同类型的栈,例如 `int` 类型和 `double` 类型。
总结
- 函数模板借助 `template <typename T>` 来定义通用函数,这样就能处理不同类型的数据。
- 类模板通过 `template <typename T>` 定义通用类,从而可以处理不同类型的数据。
通过模板,你能够编写更加通用和可复用的代码。