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