C++头文件<functional>和bind、placeholders占位符使用简单例子
相关博文:C++新特性探究(十五):bind
相关博文:C++头文件<functional>和bind、placeholders占位符使用简单例子
相关博文:《Essential C++》笔记之设计一个泛型算法(二)
相关博文:C++Function Object Adapter之not1
相关博文:C++之再探参数绑定bind、bind1st、bind2nd、placeholders占位符
<functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作、比较操作、逻辑操作;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(function call operator)的C++类,这些类的实例可以如同函数一样调用。不必写新的函数对象,而仅是组合预定义的函数对象与函数对象适配器(function object adaptor),就可以执行非常复杂的操作。
例1:
//小问学编程
#include <functional>
#include <iostream>using namespace std;static double my_divide(double x, double y) { return x / y; }int main()
{using namespace std::placeholders; // adds visibility of _1, _2, _3,...// binding functions:auto fn_five = std::bind(my_divide, 10, 2); // returns 10/2std::cout << fn_five() << '\n'; // 5auto fn_half = std::bind(my_divide, _1, 2); // returns x/2std::cout << fn_half(10) << '\n'; // 5auto fn_invert = std::bind(my_divide, _2, _1); // returns y/xstd::cout << fn_invert(10, 2) << '\n'; // 0.2auto fn_rounding = std::bind<int>(my_divide, _1, _2); // returns int(x/y)std::cout << fn_rounding(10, 3) << '\n'; // 3return 0;
}
//本例摘自侯捷《STL和泛型编程》
运行结果:
例2:
//小问学编程
#include <functional>
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;struct MyPair{double a,b;double multiply(){return a*b;}//member function其实有个argument:this
};int main()
{using namespace std::placeholders; // adds visibility of _1, _2, _3,...// binding members:MyPair ten_two{10,2}; //member function其实有个argument:thisauto bound_memfn=bind(&MyPair::multiply,_1); //returns x.multiplay()cout<<bound_memfn(ten_two)<<'\n'; //20auto bound_memfndata=bind(&MyPair::a,ten_two); //returns ten_two.ocout<<bound_memfndata()<<'\n'; //10auto bound_memfndata2=bind(&MyPair::b,_1); //returns x.bcout<<bound_memfndata2(ten_two)<<'\n'; //2vector<int> v{15,37,94,50,73,58,28,98};int n=count_if(v.cbegin(),v.cend(),not1(bind2nd(less<int>(),50)));cout<<"n="<<n<<endl; //5auto fn_=bind(less<int>(),_1,50);cout<<count_if(v.cbegin(),v.cend(),fn_)<<endl; //3cout<<count_if(v.begin(),v.end(),bind(less<int>(),_1,50))<<endl; //3return 0;
}
//本例摘自侯捷《STL和泛型编程》
运行结果:
例2分析:
C++头文件<functional>和bind、placeholders占位符使用简单例子相关推荐
- C++之再探参数绑定bind、bind1st、bind2nd、placeholders占位符
相关博文:C++头文件<functional>和bind.placeholders占位符使用简单例子 相关博文:<Essential C++>笔记之设计一个泛型算法(二) 相关 ...
- linux同名文件没有自动替换,linux – bash脚本替换文件中出现的所有占位符
我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件-- This is an {{VAR1}} {{VAR2}}. It should ...
- C++/C++11中头文件functional的使用
<functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作.比较操作.逻辑操作:以及用于绑定函数对 ...
- java 文件 模板 替换_JAVA 处理Word模板文件,替换其中的占位符
1.java处理word是个大大的坑,无论是poi还是Java2word 都不是尽善尽美. 2.poi只能进行简单读操作,Java2word需要调用系统的com接口,系统机必须安装office和动态链 ...
- Python 多个占位符 %s的例子
Python的占位符主要用于用变量替换字符串的内容,从而建立更加灵活和多样化的内容. 代码: a="Good" b= "Morning" c= "Ha ...
- linux c 各头文件作用总结
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
文章目录 一.逐行遍历文件文本数据 1.获取文件中的文本行 2.查询文本行数据 3.追加文件数据 4.使用占位符方式拼接字符串 二.完整代码示例 一.逐行遍历文件文本数据 1.获取文件中的文本行 调用 ...
- C++Primer::头文件设计基本原则 与 预处理器介绍
1.学会编写自己的头文件 有多个文件组成的程序需要一种方法连接名字的使用和声明,在C++中就是通过头文件实现的.C++程序使用头文件包含的不仅仅是类定义. 为了允许把程序写成独立的逻辑块,C++支持所 ...
- linux 头文件汇总
linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...
最新文章
- VC解析XML--使用CMarkup类解析XML
- 便捷,轻巧的Groovy数据库操作
- Acwing第 21 场周赛【完结】
- Netty writeAndFlush() 流程与异步
- matlab knn实现,Matlab之KNN实现
- 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
- BOOM!多模态遇上推荐系统
- 《学习之道》第十章方法空间能力是可以后天形成的
- 搞科研身体才是革命的本钱。
- 学前端需要什么基础知识(前端需要掌握什么 )
- 数字电路逻辑设计_第三版_微课版_第三章思考题与练习题(附答案)
- postgresql 累乘
- word 中的背景图片(浮动图形)怎么批量删除
- Android无埋点数据收集SDK关键技术解析
- [译]Hierarchical Macro Strategy Model for MOBA Game AI(王者荣耀)--翻译
- MUSDB18-HQ音乐分轨训练集和MUSDB调用方法
- 招商加盟竞价推广,怎么做才会有效果?
- 详解C语言最快关键字——register
- 微信墙如何搭建服务器地址,如何制作微信墙
- 2022级计算机保研历程