STL内建了一些函数对象
分类:
算术仿函数
关系仿函数
逻辑仿函数
用法:
这些仿函数所产生的对象,用法和一般函数完全相同
使用内建函数对象,需要引入头文件#include
功能描述:
实现四则运算
其中negate是一元运算,其他都是二元运算
仿函数原型:
template
template
template
emplate
template
template
示例
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- using namespace std;
-
- void test01()
- {
- negate<int>n;
-
- cout << n(50) << endl;//-50
- }
-
- void test02()
- {
- plus<int>p;
-
- cout << p(10,20)<< endl;//30
- }
-
- int main()
- {
- test01();
- test02();
-
- return 0;
- }
功能描述:
实现关系对比
仿函数原型:
template
template
template
template
template
template
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- using namespace std;
-
- class mycom
- {
- public:
- int operator()(int v1,int v2)
- {
- return v1 > v2;
- }
- };
-
- void test01()
- {
- vector<int>v;
- v.push_back(10);
- v.push_back(20);
- v.push_back(30);
- v.push_back(40);
- v.push_back(50);
- for(vector<int>::iterator it = v.begin();it!=v.end();it++)
- {
- cout << *it;
- }
- cout << endl;
- //sort(v.begin(),v.end(),mycom());
- sort(v.begin(),v.end(),greater<int>());//编译器提供的函数对象
- for(vector<int>::iterator it = v.begin();it!=v.end();it++)
- {
- cout << *it;
- }
-
- }
-
- int main()
- {
- test01();
-
- return 0;
- }
功能描述:
实现逻辑运算
函数原型:
template
template
template
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- using namespace std;
-
- class mycom
- {
- public:
- int operator()(int v1,int v2)
- {
- return v1 > v2;
- }
- };
-
- 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; //1 0 1 0
- //利用逻辑非 将容器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; //0 1 0 1
-
-
- }
-
- int main()
- {
- test01();
-
- return 0;
- }