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> 取反
void test01()
{
negate<int> n;
cout << n(50) << endl;
}
void test02()
{
plus<int>p;
cout << p(10, 20) << endl;
}
关系仿函数
template<class T> bool greater<T> 大于
后面如果需要仿函数做为排序的规则,可以直接使用内置的greater<>()
class mycompare
{
public:
bool operator()(int a, int b )
{
return a > b;
}
};
void test03()
{
vector <int > v;
v.push_back(5);
v.push_back(67);
v.push_back(55);
v.push_back(1);
v.push_back(23);
//sort(v.begin(), v.end(), mycompare());
sort(v.begin(), v.end(), greater<>()); // sort内置是less<>
for (vector <int >::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
逻辑仿函数
logical_and 、or 、not非
void test04()
{
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;
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;
}