1. 程式人生 > 其它 >c++模板 template

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