習(xí)日記 Day17:STL-函數(shù)對象+內(nèi)建函數(shù)對象+常用算法)
## 今天學(xué)了什么今天學(xué)習(xí)C中STL-函數(shù)對象、內(nèi)建函數(shù)對象以及STL的一些常用算法。## 函數(shù)對象定義重載函數(shù)調(diào)用操作符的類其對象成為函數(shù)對象函數(shù)對象使用重載的時行為類似函數(shù)調(diào)用也叫做仿函數(shù)。本質(zhì)函數(shù)對象是一個類不是函數(shù)。函數(shù)對象的使用在使用時可以向普通函數(shù)那樣調(diào)用可以有參數(shù)可以有返回值可以有自己的狀態(tài)函數(shù)對象可以作為參數(shù)傳遞## 謂詞定義返回值是bool類型的仿函數(shù)。如果operator接收一個參數(shù)稱為一元謂詞兩個參數(shù)稱為二元謂詞## 內(nèi)建函數(shù)對象STL內(nèi)建了一些函數(shù)對象分為算術(shù)仿函數(shù)、關(guān)系仿函數(shù)、邏輯仿函數(shù)頭文件#includefunctional### 算術(shù)仿函數(shù)templateclass T negateT 取反仿函數(shù)templateclass T plusT 加仿函數(shù)templateclass T minusT 減仿函數(shù)templateclass T multipliesT 乘仿函數(shù)templateclass T dividesT 除仿函數(shù)templateclass T modulusT 取模仿函數(shù)用法示例negateintn;n(50) ;### 關(guān)系仿函數(shù)templateclass T bool equal_toT 等于仿函數(shù)templateclass T bool not_equal_toT 不等于仿函數(shù)templateclass T bool greaterT 大于仿函數(shù)templateclass T bool greater_equalT 大于等于仿函數(shù)templateclass T bool lessT 小于仿函數(shù)templateclass T bool less_equalT 小于等于仿函數(shù)### 邏輯仿函數(shù)templateclass T bool logical_andT 邏輯與仿函數(shù)templateclass T bool logical_orT 邏輯或與仿函數(shù)templateclass T bool logical_notT 邏輯非與仿函數(shù)## STL常用算法主要頭文件 algorithm、functional、numeric等。①常用遍歷算法for_each(v.begin(), v.end()val)transform(v.begin(), v.end(), v2.begin(), _func); //搬運(yùn)* 注使用transform需要先指定v2容器的大小搬運(yùn)時復(fù)制不是剪切。②常用查找算法vectorint::iterator itfind(v.begin(), v.end(), val); //返回迭代器vectorint::iterator it find_if(v.begin(), v.end(), _pred); //返回迭代器vectorint::iterator itadjacent_find(v.begin(), v.end()); // 查找相鄰重復(fù)元素 返回迭代器bool retbinary_search(v.begin(), v.end(), val); // 二分查找 返回bool值int num count(v.begin(), v.end(), val);int num count_if(p.begin(), p.end(), _pred);* 注自定義類使用以上算法時需重載operator二分查找必須有序無序結(jié)果未知。③常用排序算法sortv.begin(), v.end(), _predmerge(v1.begin(), v1.end(), v2.begin(), v2.end(), vt.begin()); //合并兩個有序容器并存到另一個容器中合并后容器仍有序reversev.begin(), v.end(); //反轉(zhuǎn)random_shuffle(v.begin(), v.end()); //打亂順序 C14已棄用