C++進階STL-函式物件
阿新 • • 發佈:2018-12-13
函式物件的概念
- 過載 ()操作符 的類,它的物件叫做函式物件,即它是 類似於函式的 物件(它可以向函式一樣呼叫),也叫作仿函式。
注意:函式物件(仿函式)是一個類,不是一個函式。
- 過載操作符()有一個引數,稱為一元仿函式,有兩個引數,就叫二元仿函式。如果返回值是bool型別的函式物件或者普通函式,有一個引數叫做一元謂詞…
- 函式物件做引數和返回值
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Print
{
int num; // 儲存執行的次數
Print()
{
num = 0;
}
void operator()(int val)
{
cout << val << endl;
num++;
}
};
int main()
{
Print myprint;
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
Print myprint2=for_each(v1.begin (), v1.end(), myprint); //遍歷演算法,函式物件作為引數,返回值也是函式物件
cout << myprint2.num << endl; //打印出呼叫的次數,結果num=4
return 0;
}
內建的函式物件 include<functional>
- STL內建了一些函式物件,分為:
算術類函式物件
關係運算類
邏輯運算類
用這些類的物件當做函式使用,用法與函式完全相同
1. 六個算術類 的函式物件,negate是一元,其他都是二元
- template <class T> T plus<T> //加法的仿函式
- template <class T> T minute<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> //取反的仿函式
plus <int> myplus;
cout << myplus(20, 10) << endl;
//輸出結果: 30
2. 六個關係運算類 的函式物件,都是二元運算
- 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> //小於等於
3. 三個邏輯運算類 的函式物件,not是一元,其他都是二元運算
- template<class T> bool logical_and <T> //邏輯與
- template<class T> bool logical_or <T> //邏輯或
- template<class T> bool logical_not <T> //邏輯非