怎么给网站做第三方app,旅游网站界面设计,宁波seo整站优化软件,电商网站建设思维导图一、介绍 CSTL中的仿函数#xff0c;又被称为函数对象#xff0c;其实就是#xff1a;重载了()运算符的类。
因为在使用重载的operator()时#xff0c;类似于函数调用#xff0c;因此被称为仿函数。 ※注意※#xff1a;仿函数本质上是一个类#xff0c;不是函数。
二…一、介绍 CSTL中的仿函数又被称为函数对象其实就是重载了()运算符的类。
因为在使用重载的operator()时类似于函数调用因此被称为仿函数。 ※注意※仿函数本质上是一个类不是函数。
二、仿函数与函数的区别 二者最主要的区别就在于仿函数本质上是一个类所以类的内部可以用自定义成员来记录更多的信息和状态。
三、仿函数的使用 下面举一个简单的例子让各位能直观地感受到仿函数的妙用。
//仿函数
class ShowHello {
private:int showCount;//用于记录show次数
public:ShowHello() {//初始0次showshowCount 0;}//重载()运算符void operator()() {cout Hello endl;showCount;//每次使用show次数1}int getShowCount() {return showCount;}
};//主函数
int main() {ShowHello showhello;showhello();showhello();showhello();showhello();cout showHello的次数为 showhello.getShowCount() endl;return 0;
} 上述例子中我们可以通过类内部的showCount成员来统计所谓的函数调用次数这是普通函数无法做到的。程序的执行结果如下所示 四、内建仿函数 C STL中有一些内部的仿函数被称为内建仿函数。他们通常分为三类算术仿函数、关系仿函数、逻辑仿函数。在使用时需要包含头文件#includefunctional。
4.1 算术仿函数 C STL 提供了一些简单的四则运算 声明 (这里不用蓝色而是用褐色请各位记住仿函数不是函数是类) 解释templateclass T T plusT (二元运算)加法 仿函数templateclass T T minusT (二元运算)减法 仿函数templateclass T T multipliesT (二元运算)乘法 仿函数templateclass T T dividesT (二元运算)除法 仿函数templateclass T T modulusT (二元运算)取余 仿函数templateclass T T negateT (一元运算)取反 仿函数
//加法 仿函数
plusint add;
//666 222 888
cout add(666, 222) endl;//888//减法 仿函数
minusint sub;
//666 - 222 444
cout sub(666, 222) endl;//444//乘法 仿函数
multipliesint mul;
//222 * 2 444
cout mul(222, 2) endl;//444//除法 仿函数
dividesint div;
//666 / 222 3
cout div(666, 222) endl;//3//取余 仿函数
modulusint mod;
//666 % 300 66
cout mod(666, 300) endl;//66//取反 仿函数
negateint neg;
//-50 - 50
cout neg(-50) endl;//50
4.2 关系仿函数 C STL 提供了一些表示二者大小关系的仿函数 声明 (这里不用蓝色而是用褐色请各位记住仿函数不是函数是类) 解释templateclass T bool equal_toT (二元运算)等于 仿函数templateclass T bool not_equal_toT (二元运算)不等于 仿函数templateclass T bool greaterT (二元运算)大于 仿函数templateclass T bool greater_equalT (二元运算)大于等于 仿函数templateclass T bool lessT (二元运算)小于 仿函数templateclass T bool less_equalT (二元运算)小于等于 仿函数
//等于 仿函数
equal_toint eql;
// 555 666 : false
cout boolalpha eql(555, 666) endl;//false//不等于 仿函数
not_equal_toint neql;
// 555 ! 666 : true
cout boolalpha neql(555, 666) endl;//true//大于 仿函数
greaterint grt;
// 666 666 : false
cout boolalpha grt(555, 666) endl;//false//大于等于 仿函数
greater_equalint grteql;
// 666 666 : true
cout boolalpha grteql(666, 666) endl;//true//小于 仿函数
lessint ls;
// 555 666 : true
cout boolalpha ls(555, 666) endl;//true//小于等于 仿函数
less_equalint lseql;
// 666 666 : true
cout boolalpha lseql(666, 666) endl;//true
4.3 逻辑仿函数 C STL提供了一些逻辑运算的仿函数 声明 (这里不用蓝色而是用褐色请各位记住仿函数不是函数是类) 解释templateclass T bool logical_andT (二元运算)逻辑与 仿函数templateclass T bool logical_orT (二元运算)逻辑或 仿函数templateclass T bool logical_notT (一元运算)逻辑非 仿函数
//逻辑与
logical_andint land;
// 0 6 false
cout boolalpha land(0, 6) endl;//false//逻辑或
logical_orint lor;
// 0 || 6 true
cout boolalpha lor(0, 6) endl;//true 这里我们用逻辑非来解释一下平时使用内建仿函数的方便之处
假设我们目前的需求是将向量v0中的全部bool元素取反再存入v1中
vectorbool v0;
vectorbool v1;v0.push_back(true);
v0.push_back(false);
v0.push_back(true);
v0.push_back(false);//v0 true false true false
cout v0 : [;
for (bool e : v0) {cout boolalpha e ;
}
cout ] endl;//设置v1的大小
v1.resize(v0.size());
//设置将v0的元素取反后装入v1
transform(v0.begin(), v0.end(), v1.begin(), logical_notbool());//v1 false true false true
cout v1 : [;
for (bool e : v1) {cout boolalpha e ;
}
cout ] endl; 注意如果要使用transform函数需要#includealgorithm。程序运行结果如下