小明是一個很牛逼的程式員,在國際標準化組織工作。 他現在正在設計新一代的C++標準,標準中有一個待實現的函數:findMax(),這個函數要求使用者輸入任何類型的數據,他都能找到最大的一個。 於是他想到了這個: int findMax(int a,int b){ if(a>b){ return a; ...
小明是一個很牛逼的程式員,在國際標準化組織工作。
他現在正在設計新一代的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.又太多的數據結構需要相容,還有世界各地的開發者整齣來的奇形怪狀的數據結構,不能滿足標準庫的要求
它更換了一種寫法:
template <class T> T findMax(T a,T b){ if(a>b){ return a; } else{ return b; } }
看起來好奇怪!它能運行嗎?
讓我們測試一下:
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演算法庫,連排序,二分查找都不用自己寫啦!