仿函数那些事---算数运算与关系运算
2015-10-05 17:48
330 查看
1.仿函数在STL中的定义
要使用STL内建的仿函数,必须包含functional头文件。1.Arithmetic operations
加:plus减:minus
乘:multiplies
除:divides
求余数:modulus
否定:negate
源代码
#include <iostream> #include <numeric> #include <vector> #include <functional> using namespace std; int main() { int ia[]={1,2,3,4,5}; vector<int> iv(ia,ia+5); cout<<accumulate(iv.begin(),iv.end(),1,multiplies<int>())<<endl; //求取5*4*3*2,记住它的调用方式 cout<<multiplies<int>()(3,5)<<endl; modulus<int> modulusObj; cout<<modulusObj(3,5)<<endl; // 计算3%5的余数 return 0; }
运行结果
accumulate_cplusplus
关于里面accumlate的例子
// accumulate example #include <iostream> // std::cout #include <functional> // std::minus #include <numeric> // std::accumulate int myfunction (int x, int y) {return x+2*y;} struct myclass { int operator()(int x, int y) {return x+3*y;} } myobject; int main () { int init = 100; int numbers[] = {10,20,30}; std::cout << "using default accumulate: "; std::cout << std::accumulate(numbers,numbers+3,init); std::cout << '\n'; std::cout << "using functional's minus: "; std::cout << std::accumulate (numbers, numbers+3, init, std::minus<int>()); std::cout << '\n'; std::cout << "using custom function: "; std::cout << std::accumulate (numbers, numbers+3, init, myfunction); //① std::cout << '\n'; std::cout << "using custom object: "; std::cout << std::accumulate (numbers, numbers+3, init, myobject); //② std::cout << '\n'; return 0; }
对于①,myfunction函数的两个参数(x,y),x=init;y=*number。每一次init=myfunction的返回值,同时y=*(number+1);
对于②,同理于①
运行结果
modulus在cplusplus中的定义
2.关系运算类仿函数
等于:equal_to
不等于:not_equal_to
大于:greater
大于等于:greater_equal
小于:less
小于等于:less_equal
从大到小排序:
#include <iostream> #include <algorithm> #include <vector> #include<functional> using namespace std; template <class T> class display { public: void operator()(const T &x) { cout<<x<<" "; } }; int main() { int ia[]={1,5,4,3,2}; vector<int> iv(ia,ia+5); sort(iv.begin(),iv.end(),greater<int>()); for_each(iv.begin(),iv.end(),display<int>()); return 0; }
相关文章推荐
- >/dev/null 2>&1 的作用
- 解决微信端手机视频播放兼容性问题
- /etc/rc.d/init.d/functions文件详细分析
- Linux启动与进程:前台进程和后台进程
- 【源码】员工管理系统c++大型实验,含实验报告
- 二分+树上乱搞 zoj3820 Building Fire Stations
- eclipse快速复制一行代码(向下/向上)快捷键冲突问题
- 第三次复习课--UI(完)
- sessionFactory 生成数据库表
- Linux网络编程---I/O多路复用之epoll
- Spring容器中Bean的生命周期
- UIPushBehavior :推动效果 ,UISnapBehavior:迅速移动效果,UIAttachmentBehavior:附着效果
- HDU5375 GRAY CODE
- 连上WiFi后,笔记本离路由器比较近时,电脑播音偶尔卡音
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十二节:Shell编程入门(四)
- Ubuntu下安装搜狗输入法&flash
- 一篇介绍android最新组件的好文
- 【json】json对象和json数组的操作
- int、String等类型转换
- xcode armv6 armv7 armv7s arm64