STL庫學習筆記(一)——什麼是STL?

小明是一個很牛逼的程序員,在國際標準化組織工做。程序員

他如今正在設計新一代的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

相關文章
相關標籤/搜索