模板是C++语言中的一个强大特性,它允许程序员编写通用代码以处理不同数据类型的数据,从而实现代码的重用和泛化。
一、C++模板的基本概念
C++模板是一种泛型编程工具,通过参数化类型来编写通用的函数和类。模板的核心思想是允许程序员编写一次代码,然后通过将不同的数据类型作为参数来创建多个具体的实例。这种机制大大提高了代码的重用性和泛化程度。
1. 模板的分类
C++模板主要分为两种:函数模板和类模板。
函数模板:允许编写一般性的函数,其中某些参数的类型被视为模板参数,可以在函数调用时指定。例如,可以编写通用的排序函数,不必为每种数据类型都编写不同的排序算法。
类模板:允许创建通用的类,其中一些成员或成员函数的类型被视为模板参数。这使得可以创建通用的容器类(如向量、链表等)或数据结构。
2. 模板参数
模板参数可以是类型参数或非类型参数。
类型参数:允许指定不同的数据类型,这是最常见的模板参数类型。
非类型参数:允许指定常量或值,以定制化模板的行为。非类型参数可以是整数、枚举、指针等。
二、C++模板的使用
- 函数模板
函数模板允许编写与数据类型无关的函数。其基本语法如下:
template<typename T>
T functionName(T param1, T param2) {
// 函数实现
}
例如,编写一个通用的交换函数模板:
template<typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
在使用时,编译器会根据传递的参数类型自动推导T的类型。
#include <iostream>
template<typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std