c++模板 template
模板就是建立通用的模具,大大提高复用性
模板的特点:
-
模板不可以直接使用,它只是一个框架
-
模板的通用并不是万能的
函数模板
-
C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板
-
C++提供两种模板机制:函数模板和类模板
函数模板案例
案例描述:
-
利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
-
排序规则从大到小,排序算法为快速排序
-
分别利用char数组和int数组进行测试
总结:模板可以提高代码复用,需要熟练掌握
template<typename T>
函数声明或定义
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 // 函数模板 类型任意, 7 template<class T> // or <typename T> 8 void mySwap( T &a, T &b) { 9 T temp = a ; 10 a = b; 11 b = temp; 12 } 13 14 template<class T> 15 void mySort (T arr[], int l, int r) { 16 if (l >= r) return ; 17 int x = arr[l + r >> 1] ; 18 int i = l - 1, j = r + 1; 19 20 while (i < j) { 21 do i++; while (arr[i] < x); 22 do j--; while (arr[j] > x); 23 if (i < j) mySwap(arr[i],arr[j]); 24 } 25 mySort(arr, l, j); 26 mySort(arr, j+1, r); 27 28 } 29 30 template <class T> 31 void printArray(T arr[], int len ) { 32 33 for (int i = 0; i < len; i++) cout << arr[i] << ' ' ; 34 cout << endl; 35 } 36 37 void testMySort() { 38 char charArr[] = "qazwsxedc"; 39 int num = sizeof(charArr) / sizeof(char); 40 mySort(charArr, 0, num - 1); 41 printArray(charArr, num); 42 } 43 44 45 46 int main() { 47 int a = 10, b = 20; 48 // 自动类型推导 必须推导出一致的数据类型T,才可以使用 49 mySwap(a,b); 50 cout << a << ' '<< b << endl; 51 52 string s1, s2; 53 s1 = "s1s1"; 54 s2 = "s2s2"; 55 // 显示指定类型 func<int>(); //利用显示指定类型的方式,给T一个类型,才可以使用 56 mySwap<string>(s1,s2); 57 cout << s1 << ' ' << s2 << endl; 58 59 testMySort(); 60 61 system("pause"); 62 63 return 0; 64 } 65