1、函数对象
1.1、函数对象概念
概念:
- 重载函数调用()操作符的类,其对象常称为函数对象
- 函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个类,不是一个函数
1.2、函数对象的使用
特点:
- 函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
- 函数对象超出普通函数的概念,函数对象可以有自己的状态
- 函数对象可以作为参数传递
示例:
//函数对象的特点
class myAdd {
public:
myAdd() {
this->count = 0;
}
int operator()(int a,int b) {
count++;
return a + b;
}
int count;
};
//1、函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
void test01() {
myAdd add;
cout
2、谓词
2.1、谓词概念
概念:
- 返回bool类型的仿函数称为谓词
- 如果operator()接受一个参数,那么叫做一元谓词
- 如果operator()接受两个参数,那么叫做二元谓词
2.2、一元谓词
示例:
#include
#include
//一元谓词
class greaterFive {
public:
bool operator()(int a) {
return a > 5;
}
};
void test01() {
vector v;
for (int i = 0; i ::iterator it = find_if(v.begin(),v.end(),greaterFive());
if (it == v.end()) {
cout
2.3、二元谓词
#include
#include
//二元谓词
class myCompare {
public:
bool operator()(int a,int b) {
return a > b;
}
};
void test01() {
vector v;
v.push_back(10);
v.push_back(50);
v.push_back(40);
v.push_back(30);
v.push_back(70);
//sort(),默认升序
sort(v.begin(),v.end());
for (int i = 0; i
3、内建函数对象
3.1、理解内建函数对象
概念:
- STL内建了一些函数对象
分类:
- 算术仿函数
- 关系仿函数
- 逻辑仿函数
用法:
- 这些仿函数所产生的对象,用法和一般函数完全相同
- 使用内建函数对象,需要引入头文件 #include
3.2、算术仿函数
功能描述:
- 实现四则运算
- 其中negate是一元运算,其他都是二元运算
仿函数原型:
- template T plus //加法仿函数
- template T minus //减法仿函数
- template T multiplies //乘法仿函数
- template T divides //除法仿函数
- template T modulus //取模仿函数
- template T negate //取反仿函数
示例:
void test01() {
//一元运算 negate
negate n;
int a = 10;
cout p; //+
cout m; //-
cout mp; //*
cout d; // /
cout md;
cout
3.3、关系仿函数
功能描述:
- 实现关系对比
仿函数原型:
- template bool equal_to //等于
- template bool not_equal_to //不等于
- template bool greater //大于
- template bool greater_equal //大于等于
- template bool less //小于
- template bool less_equal //小于等于
示例:
//关系仿函数
void test01() {
vector v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(20);
v.push_back(40);
for (int i = 0; i ()
sort(v.begin(),v.end());
for (int i = 0; i (),改变规则为升序
sort(v.begin(),v.end(),greater());
for (int i = 0; i
3.4、逻辑仿函数
功能描述:
- 实现逻辑运算
函数原型:
- template bool logical_and //逻辑与
- template bool logical_or //逻辑或
- template bool logical_not //逻辑非
示例:
//逻辑仿函数
void test01() {
vector v;
v.push_back(true);
v.push_back(false);
v.push_back(true);
v.push_back(false);
v.push_back(true);
for (int i = 0; i v2;
v2.resize(v.size());
transform(v.begin(),v.end(),v2.begin(),logical_not());
for (int i = 0; i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
最近的时间过得非常快,发生了很多事情。有对AI的痴迷,有对技术的缓步积累,也有对自己定位的思考。 很多时候未来是自己非完全选择的,现实推着理想继续走,时间推着我们做出选择。我们也知道没有最完美的时候,只有相对准备好的机会,然后再出发。我创业失败也有大部分是我自…