c++模板 template
阿新 • • 發佈:2021-08-11
模板就是建立通用的模具,大大提高複用性
模板的特點:
-
模板不可以直接使用,它只是一個框架
-
模板的通用並不是萬能的
函式模板
-
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> 15void 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