1.1函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表,提高复用性
1.2语法:
cpp
//第一种
template <typename T>
函数声明或定义
//第二种
template <class T>
函数声明或定义
解释:
template:关键字,声明创建模板
typename和class:关键字,声明其后面的符号是一种数据类型,可以用class代替
T:通用的数据类型名称可以替换,通常为大小写
1.3示例:
cpp
#include<iostream>
#include<math.h>
using namespace std;
//利用模板提供通用的交换函数
template < typename T >
void Swap(T & a, T & b)
{
T temp = a;
a = b;
b = temp;
}
void test()
{
int a = 10, b = 20;
//利用模板实现交换
//1.自动类型推导
Swap(a, b);
//2.显方指定类型
Swap<int>(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main()
{
test();
return 0;
}
1.4模板注意事项:
1.模板必须要确定出t的数据类型才可以使用
cpp
#include<iostream>
#include<math.h>
using namespace std;
//利用模板提供通用的交换函数
template < typename T >
void func()
{
cout << "func的调用" << endl;
}
void test()
{
func();
}
int main()
{
test();
return 0;
}
运行发现报错了,这是因为。没有确定出T的类型,下面我们显示的指定出T的类型:
cpp
#include<iostream>
#include<math.h>
using namespace std;
//利用模板提供通用的交换函数
template < typename T >
void func()
{
cout << "func的调用" << endl;
}
void test()
{
func<int>();
}
int main()
{
test();
return 0;
}
cpp
//运行结果:
func的调用
1.5案例:
1.创建一个通用的快速排序的函数模板,可以排序各种数据类型的数组中的元素
2.创建一个通用的打印输出的函数模板,可以输出各种数据类型的数组中的元素
代码如下:
cpp
#include<iostream>
#include<stdlib.h>
using namespace std;
#define SIZE 6
//1.创建通用快速排序函数模板
template <class T>
void quick_sort(T num[], int low, int high )
{
int i,j;
T temp;
T tmp;
i = low;
j = high;
tmp = num[low];
if(i > j)
{
return;
}
while(i != j)
{
while(num[j] <= tmp && i < j)
{
j--;
}
while(num[i] >= tmp && i < j)
{
i++;
}
if(i < j)
{
temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}
num[low] = num[i];
num[i] = tmp;
quick_sort(num,low,i-1);
quick_sort(num,i+1,high);
}
//2.创建通用打印输出函数模板
template <typename T>
void Print(T array[SIZE])
{
for(int i = 0; i < SIZE; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
//测试函数
void test()
{
//测试1
//创建一个int数组
int array1[SIZE] ={1, 2, 3, 4,5,6};
//2.排序
quick_sort<int>(array1,0,SIZE-1);
//3.输出排序结果
Print<int>(array1);
//测试2
//创建一个float数组
float array2[SIZE] ={1.5, 2.5, 3.6, 4.4, 5.9, 6.7};
//2.排序
quick_sort<float>(array2,0,SIZE-1);
//3.输出排序结果
Print<float>(array2);
}
int main()
{
test();
return 0;
}
运行结果:
cpp
6 5 4 3 2 1
6.7 5.9 4.4 3.6 2.5 1.5