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