C++ 模板
文章目录
1. 模板的概念
模板就是建立通用模具,大大提高复用性。例如:PPT模板
C++中模板:
- C++另一种编程思想称为泛型编程,主要利用的技术就是模板
- C++提供两种模板机制:函数模板 和 类模板
模板特点:
- 模板不可以直接使用,它只是一个框架
- 模板的通用并不是万能的
2. 函数模板
1. 函数模板语法
函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型代表
语法:
template <typename T>
函数声明或定义
解释:
template
:声明创建模板
typename
:表面其后面的符号是一种数据类型,可以用class
代替
T
:通用的数据类型,名称可以替换,通常为大写字母
总结:
- 函数模板利用关键字
template
- 使用函数模板有两种方式:自动类型推导,显示指定类型
- 模板的目的是为了提高复用性,将类型参数化
例:
#include <iostream>
using namespace std;
//函数模板
//交换两个整数
void swapInt(int &a,int &b)
{
int t = a;
a = b;
b = t;
}
//交互两个浮点数
void swapDouble(double &a,int &b)
{
double t = a;
a = b;
b = t;
}
//声明一个模板 告诉编译器后面代码中紧跟着的T不要报错,T是一个通用的数据类型
template<typename T>
void mySwap(T &a,T &b)
{
T t = a;
a = b;
b = t;
}
void test()
{
int a = 10, b = 20;
//利用模板函数交换
//两种方式使用函数模板
//1. 自动类型推导
mySwap(a,b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
//2. 显式指定类型
mySwap<int>(a,b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main()
{
test();
system("pause");
return 0;
}
2. 函数模板的注意事项
注意事项:
- 自动类型推导,必须导出一致的数据类型T,才可以使用
- 模板必须确定出T的数据类型,才可以使用
例:
//1. 数据类型必须一致
template<typename T>
void mySwap(T &a,T &b)
{
T t = a;
a = b;
b = t;
}
int a = 10;
char b = 'a';
mySwap(a,b);//无法这样使用
//2. 函数模板必须要确定出T的数据类型,才可以使用
template<class T>
void func()
{
cout << "--" << endl;
}
func();//这样无法调用
func<int>();//必须确定出类型才能使用
3. 函数模板案例
案例描述:
- 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
- 排序规则从大到小,排序算法为选择排序
- 分别利用
char
数组和int
数组进行测试
源码:https://blog.youkuaiyun.com/weixin_50901683/article/details/113903113
4. 普通函数与函数模板的区别
区别:
- 普通函数调用可以发生自动类型转换(隐式类型转换)
- 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
- 如果利用显示指定类型方式,可以发生隐式类型转换
总结:建议使用显示指定类型方式,调用函数模板,因为可以自己确定通用的类型T
例:
void f(