日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内建函数对象(STL)

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内建函数对象(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 一個一元一個二元,二元用法都一樣;
代碼如下:

#include<iostream> #include<functional>int main() {//取反仿函數 std::negate<int> n;std::cout << n(10) << std::endl;//乘法仿函數std::multiplies<int> m;std::cout << m(10, 10) << std::endl;return 0; }

關系仿函數

關系仿函數的幾種常見類型:

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>());這個形式)
代碼如下:

#include<iostream> #include<functional> #include<algorithm> using namespace std;//自己創建的仿函數 class MyCompare { public:bool operator() (int a, int b) {return a > b;} };int main() {vector<int> vec;vec.push_back(20);vec.push_back(40);vec.push_back(10);vec.push_back(30);vec.push_back(90);//正常sort排序是從小到大sort(vec.begin(), vec.end());for (int i : vec) cout << i << ' '; cout << endl;//讓sort從大到小排序方法:// 1,自己寫個仿函數 // sort(vec.begin(), vec.end(), MyCompare());// 2,用STL的內建函數對象大于greater */ sort(vec.begin(), vec.end(), greater<int>());for (int i : vec) cout << i << ' '; cout << endl;return 0; }

為了加深對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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。