小明是一個很牛逼的程序員,在國際標準化組織工做。程序員
他如今正在設計新一代的C++標準,標準中有一個待實現的函數:findMax(),這個函數要求使用者輸入任何類型的數據,他都能找到最大的一個。算法
因而他想到了這個:編程
int findMax(int a,int b){ if(a>b){ return a; } else{ return b; } } char findMax(char a,char b){ if(a>b){ return a; } else{ return b; } }
這種寫法成功的解決了問題,可小明仍是不滿意:數據結構
1.有太多冗餘的代碼,寫出來的頭文件又大又low,全世界的開發者都要罵娘函數
2.又太多的數據結構須要兼容,還有世界各地的開發者整出來的奇形怪狀的數據結構,不能知足標準庫的要求測試
它更換了一種寫法:spa
template <class T> T findMax(T a,T b){ if(a>b){ return a; } else{ return b; } }
看起來好奇怪!它能運行嗎?設計
讓咱們測試一下:code
int main(){ cout<<"findMax(1,3):"<<findMax(1,3)<<endl; cout<<"findMax('A','a'):"<<findMax('A','a')<<endl; }
運行的十分正常,這段函數成功了!此時傳入函數的參數,只要可以用「>」運算符來比較,就可以運行。好比int類型,函數會返回大的值,char類型,函數會返回ASCII碼靠後的值。這稱爲泛型編程(Generic Programming),用人話來講就是用相同的方法處理不一樣的結構,而支撐這個思想的語法就成爲模板(template)。整個STL標準模板庫就是使用template來實現的,他把教科書上的各類數據結構,好比鏈表啦,隊列啦,棧啦,都封裝到一塊兒,供咱們調(tou)用(lan),再配合它的algorithm算法庫,連排序,二分查找都不用本身寫啦!blog