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;
- }
来源: http://www.bubuko.com/infodetail-3354528.html