内建函数对象(STL)
引言
函數(shù)對(duì)象是重載函數(shù)調(diào)用操作符的類,函數(shù)對(duì)象使用重載的()時(shí),因?yàn)轭愃坪瘮?shù)調(diào)用,也叫仿函數(shù)
所以仿函數(shù)(函數(shù)對(duì)象)就是一個(gè)類
我們可以自己建立函數(shù)對(duì)象,這里就不具體說了;STL中同樣給我們提供了一些內(nèi)建的函數(shù)對(duì)象,可以直接使用;
分為以下三種:
算術(shù)仿函數(shù)
關(guān)系仿函數(shù)
邏輯仿函數(shù)
這些仿函數(shù)的用法和一般的函數(shù)用法差不多相同,但是使用需要頭文件#include<functional>
算術(shù)仿函數(shù)
幾種常見的算術(shù)仿函數(shù):
template<class T> T plus<T> //加法仿函數(shù) template<class T> T minus<T> //減法仿函數(shù) template<class T> T multiplies<T> //乘法仿函數(shù) template<class T> T divides<T> //除法仿函數(shù) template<class T> T modulus<T> //取模仿函數(shù) template<class T> T negate<T> //取反仿函數(shù)這里面只有negate是一元運(yùn)算,其他都是二元運(yùn)算,所以下面的示例代碼我們就舉 negate 和 multiplies 一個(gè)一元一個(gè)二元,二元用法都一樣;
代碼如下:
關(guān)系仿函數(shù)
關(guān)系仿函數(shù)的幾種常見類型:
template<class T> bool equal_to<T> //等于 template<class T> bool not_equal_to<T> //不等于 template<class T> bool greater<T> //大于 template<class T> bool greater_equal<T> //大于等于 template<class T> bool less<T> //小于 template<class T> bool less_equal<T> //小于等于這里面用的最多的其實(shí)是 greater,下面例子也是它的,其余的了解就行;
(這里記錄 greater 也是為了 sort 從大到小排列節(jié)省步驟)
(一定要記住sort(vec.begin(), vec.end(), greater<int>());這個(gè)形式)
代碼如下:
為了加深對(duì)sort理解,可以看一下sort實(shí)現(xiàn)的部分源碼:
可以看到sort分別被定義了兩種形式,第一種就是有三個(gè)參數(shù),
這里我們主要看第二種兩個(gè)參數(shù),sort 默認(rèn)從小到大排序的原理就在這里,
可以看到黃色部分是一個(gè)less<>(),這個(gè)不就是關(guān)系仿函數(shù)中的小于仿函數(shù)嘛;
所以sort才會(huì)默認(rèn)從小到大
所以就能很好理解關(guān)系仿函數(shù)和sort了;
邏輯仿函數(shù)
邏輯仿函數(shù)沒有什么說的,用的也不多,就羅列以下,以后要是用到了再補(bǔ)充;
template<class T> bool logical_and<T> //邏輯與 template<class T> bool logical_or<T> //邏輯或 template<class T> bool logical_not<T> //邏輯非總結(jié)
這里還是著重強(qiáng)調(diào)下算術(shù)仿函數(shù)和關(guān)系仿函數(shù),尤其要記住關(guān)系仿函數(shù)中的greater<>(),同樣要根深一層的理解sort;
總結(jié)
以上是生活随笔為你收集整理的内建函数对象(STL)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lower_bound和 upper_b
- 下一篇: C++的几种遍历形式