STL内建了一些函数对象:算数仿函数、关系仿函数、逻辑仿函数
用法:
这些仿函数所产生的对象,用法和一般函数完全相同;
使用內建函数对象,需要引入头文件#<include><functional>
一、算数仿函数
#include<iostream> using namespace std; #include <functional> //内建函数对象头文件 //内建函数对象 算术仿函数 //negate 一元仿函数 取反仿函数 void test01() { negate<int>n; cout << n(50) << endl; } //plus 二元仿函数 加法 void test02() { plus<int>p; cout << p(10, 20) << endl; } int main() { test01(); test02(); system("pause"); return 0; }
二、关系仿函数
#include<iostream> using namespace std; #include <vector> #include <algorithm> #include <functional> //内建函数对象 _关系仿函数 //大于 greater class MyCompare { public: bool operator()(int v1,int v2) { return v1 > v2; } }; void test01() { vector<int>v; v.push_back(10); v.push_back(30); v.push_back(40); v.push_back(20); v.push_back(50); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; //降序 //sort(v.begin(), v.end(), MyCompare()); //greater<int>() 内建函数对象 sort(v.begin(), v.end(), greater<int>()); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; } int main() { test01(); system("pause"); return 0; }
3.逻辑仿函数
#include<iostream> using namespace std; #include <vector> #include <algorithm> #include <functional> //内建函数对象_逻辑仿函数 //逻辑非 logical_not void test01() { vector<bool>v; v.push_back(true); v.push_back(false); v.push_back(true); v.push_back(false); for (vector<bool>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; //利用逻辑非 将容器v 搬运到 容器v2中,并执行取反操作 vector<bool>v2; v2.resize(v.size()); transform(v.begin(), v.end(), v2.begin(), logical_not<bool>()); for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++) { cout << *it << " "; } cout << endl; } int main() { test01(); system("pause"); return 0; }