c++模板 template

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  

 

posted @ 2021-08-11 21:32  Leo-aiolia-bao  阅读(104)  评论(0编辑  收藏  举报