目录
模板
1.1 模板的概念
模板就是建立通用的模具,大大提高复用性。
1.2 函数模板
1.2.1 函数模板的语法
函数模板的作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,
用一个虚拟的类型来代表
语法:
template <typename T>
函数声明或定义
解释:
template
—— 声明创建模板
tpyename
—— 表明其后面的符号是一种数据类型,可以用class代替
T
—— 通用的数据类型,名称可以替换,通常为大写字母
#include <iostream>
using namespace std;
void swapInt(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void swapDouble(double &a, double &b)
{
int temp = a;
a = b;
b = temp;
}
template<typename T>
void mySwap(T &a,T &b)
{
T temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
//swapInt(a,b);
//1.自动类型推导
mySwap(a,b);
//2.显示指定类型
mySwap<int>(a,b);
cout << a << " " << b <<endl;
//double c = 10.0;
//double d = 20.0;
//swapDouble(c,d);
//cout << a << " " << b <<endl;
}
int main()
{
test01();
system("pause");
return 0;
}
1.2.2 函数模板的注意事项
#include <iostream>
using namespace std;
//函数模板的注意事项
//1.自动类型推导,必须推导出一致的数据类型T才可以使用
template<class T> //typename 可以替换为 class
void mySwap(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
char c = 'c';
mySwap(a,b);
//mySwap(a,c); 错误,推导不出一致的T类型
cout << a << endl;
cout << b << endl;
}
//2.模板必须要确定出T的数据类型,才可以使用
template <class T>
void func()
{
cout << "func is used" << endl;
}
void test02()
{
func<int>(); //正确
func(); //错误
//一定要确定数据类型,不然不能调用模板
}
int main()
{
test02();
system("pause");
return 0;
}
1.2.3 函数模板案例
案例描述:
1.利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
2.排序规则从大到小,排序算法为选择排序
3.分别利用char数组和int数组进行测试
#include <iostream>
using namespace std;
//交换函数模板
template <class T>
void mySwap(T &a, T&b)
{
int temp = a;
a = b;
b = temp;
}
//选择排序模板
template <class T>
void mySort(T arr[], int len)
{
for(int i = 0; i < len; i++)
{
int max = i;
for(int j = i+1; j < len; j++)
{
if (arr[max] < arr[j])
{
max = j;
}
}
if (max != i)
{
mySwap(arr[max],arr[i]);
//交换max 与 i
}
}
}
//输出数组模板
template <class T>
void printArray(T arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void test01()
{
//测试char数组
char charArr[] = "badcfe";
int num = sizeof(charArr) / sizeof(char);
mySort(charArr, num);
printArray(charArr,num);
cout << " ———————————————— " << endl;
}
void test02()
{
//测试int数组
int intArr[] = {
8,3,57