在實際程式設計中,常常會需要一些方法(函式),比如排序,它們具體實現基本一致,僅僅只有引數型別不同, 那麼可不可以有一種通用的函式,不管是什麼型別的引數都可以通用呢?
泛型程式設計:泛型即是指具有在多種資料型別上皆可操作的含義,與模板有些相似。利用泛型程式設計,我們可以寫一些通用的函式,以減少**量,實現**的通用性,以下簡單的舉個慄?子
泛型氣泡排序:
#include #include #include #include // bool 型別
typedef int(*pfun)(void*, void*);//pfun函式指標資料型別
/*------------------比較傳入的引數大小------------------------*/
int cmp_int(void* vp1, void* vp2)
int cmp_double(void* vp1, void* vp2)
else if (tmp <= -eps)
else }
int cmp_ch(void* vp1, void* vp2)
int cmp_str(void* vp1, void* vp2)
/*--------------------交換函式------------------------*/
void swap(void* vp1, void* vp2, int size)
//arr:陣列首位址;len:陣列長度;elemsize:每個元素的位元組數,pcmp對應型別的比較函式的指標
void bubblesort(void* arr, int len, int elemsize, pfun pcmp)
} if (flag == 0) break; //沒有進行交換,已有序 }}
int main()
; bubblesort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), cmp_int);
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
printf("\n");
/*-----------浮點數(float、double)型陣列排序測試------------*/
double drr = ;
bubblesort(drr, sizeof(drr) / sizeof(drr[0]), sizeof(double), cmp_double);
for (int i = 0; i < sizeof(drr) / sizeof(drr[0]); i++)
printf("\n");
/*--------字元型陣列排序測試---------*/
char crr = ;
bubblesort(crr, sizeof(crr) / sizeof(crr[0]), sizeof(char), cmp_ch);
for (int i = 0; i < sizeof(crr) / sizeof(crr[0]); i++)
printf("\n");
/*--------字串型陣列排序測試---------*/
const char* srr = ;//大寫字母排在前
bubblesort(srr, sizeof(srr) / sizeof(srr[0]), sizeof(char*), cmp_str);
for (int i = 0; i < sizeof(srr) / sizeof(srr[0]); i++)
printf("\n");
return 0;
}
C語言泛型程式設計 泛型氣泡排序
在實際程式設計中,常常會需要一些方法 函式 比如排序,它們具體實現基本一致,僅僅只有引數型別不同,那麼可不可以有一種通用的函式,不管是什麼型別的引數都可以通用呢?泛型程式設計 泛型即是指具有在多種資料型別上皆可操作的含義,與模板有些相似。利用泛型程式設計,我們可以寫一些通用的函式,以減少 量,實現 ...
C 泛型的氣泡排序
1.普通的整型氣泡排序 void bubblesort int a,int size template 泛型可指定公升降序的氣泡排序 void sortbubble t a,int size,bool ret 1 測試上述函式 int main sortbubble arr,sizeof arr s...
泛型排序(C )
一般講排序演算法的文章,為了方便說明演算法本身,待排序元素的型別一般使用整型。還有些文章講泛型排序,待排序元素可以是任意型別,但對於待排序序列,卻一般只支援某一種儲存形式,比如定長陣列,比如std vector,但不能同時支援它們。那麼我們有沒有辦法使用泛型技術即支援任意元素型別又支援大多數常用的序...