文档介绍:第9章模板 函数模板 模板函数的覆盖 类模板 函数模板 1. 问题的提出重载函数可以解决功能相同或相似的函数使用同一个函数名的问题。 void swap(char &x, char &y) { char t =x; x = y; y = t; } void swap(int &x, int &y) { int t =x; x = y; y = t; } void swap(float &x, float &y) { float t =x; x = y; y = t; }实际代码量并未减少。可使用函数模板减少大量代码。 template < typename T> 类型名函数名(参数表) {函数体} 函数模板 2. 函数模板的定义 template <class T> 或类型名函数名(参数表) { 函数体 } 函数模板就像是一个带有类型参数的函数(参数 T即为类型),编译程序会根据实际参数的类型确定参数的类型。例 定义用于变量交换的函数模板#include < > template <class T> void swap(T &x, T &y) { T temp=x; x=y; y=temp; } void main(void ){ char a='A', b='B'; int c=123, d=456; double x=, y=; swap(a , b); swap(c , d); swap(x , y); cout << a << "," << b << endl ; cout << c << "," << d << endl ; cout << x << "," << y << endl ; }程序运行结果为: 程序运行结果为: B, A B, A 456, 123 456, 123 , , T本身是一个类型参数,在调用函数 swap ()时,编译程序会根据实际参数的类型确定 T的类型。例 插入排序函数模板,使用插入排序函数模板可以为不同数据类型的数组排序,如整型、字符型、实型等等,为了使程序具有通用性,设计函数模板 InsertionSort ()。插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小插入到已排序序列的合适位置,直到待排序元素全部插入完为止。例 (续一) template <class T> void InsertionSort(T A[], int n) { int i, j; T temp; for (i = 1; i < n; i++) { / /从 A[i-1] 开始向 A[0] 方向扫描各元素,寻找适当位置插入 A[i ] j = i; temp = A[i ]; while (j > 0 && temp < A[j-1]) { / /当遇到 temp>=A[j-1] 结束循环时, j便是应插入的位置/ /当遇到 j==0 结束循环时,则 0是应插入的位置。 A[j ] = A[j-1]; / /将元素逐个后移,以便找到插入位置时可立即插入。 j--; } A[j ] = temp; } } 例 (续二) #include < > void main() { int a[10]={2,4,1,8,7,9,0,3,5,6}; double b[10]={, , , , , , , , , }; InsertionSort(a,10); InsertionSort(b,10); cout << a[0] << " " << a[1]<< " " << a[2] << " " << a[3] << " "; cout << a[4] << " " << a[5]<< " " << a[6] << " " << a[7] << " "; cout << a[8] << " " << a[9]<< endl ; cout << b[0] << " " << b[1]<<