相关博文: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占位符使用简单例子相关推荐

  1. C++之再探参数绑定bind、bind1st、bind2nd、placeholders占位符

    相关博文:C++头文件<functional>和bind.placeholders占位符使用简单例子 相关博文:<Essential C++>笔记之设计一个泛型算法(二) 相关 ...

  2. linux同名文件没有自动替换,linux – bash脚本替换文件中出现的所有占位符

    我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件-- This is an {{VAR1}} {{VAR2}}. It should ...

  3. C++/C++11中头文件functional的使用

    <functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作.比较操作.逻辑操作:以及用于绑定函数对 ...

  4. java 文件 模板 替换_JAVA 处理Word模板文件,替换其中的占位符

    1.java处理word是个大大的坑,无论是poi还是Java2word 都不是尽善尽美. 2.poi只能进行简单读操作,Java2word需要调用系统的com接口,系统机必须安装office和动态链 ...

  5. Python 多个占位符 %s的例子

    Python的占位符主要用于用变量替换字符串的内容,从而建立更加灵活和多样化的内容. 代码: a="Good" b= "Morning" c= "Ha ...

  6. linux c 各头文件作用总结

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

  7. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )

    文章目录 一.逐行遍历文件文本数据 1.获取文件中的文本行 2.查询文本行数据 3.追加文件数据 4.使用占位符方式拼接字符串 二.完整代码示例 一.逐行遍历文件文本数据 1.获取文件中的文本行 调用 ...

  8. C++Primer::头文件设计基本原则 与 预处理器介绍

    1.学会编写自己的头文件 有多个文件组成的程序需要一种方法连接名字的使用和声明,在C++中就是通过头文件实现的.C++程序使用头文件包含的不仅仅是类定义. 为了允许把程序写成独立的逻辑块,C++支持所 ...

  9. linux 头文件汇总

    linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...

最新文章

  1. VC解析XML--使用CMarkup类解析XML
  2. 便捷,轻巧的Groovy数据库操作
  3. Acwing第 21 场周赛【完结】
  4. Netty writeAndFlush() 流程与异步
  5. matlab knn实现,Matlab之KNN实现
  6. 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
  7. BOOM!多模态遇上推荐系统
  8. 《学习之道》第十章方法空间能力是可以后天形成的
  9. 搞科研身体才是革命的本钱。
  10. 学前端需要什么基础知识(前端需要掌握什么 )
  11. 数字电路逻辑设计_第三版_微课版_第三章思考题与练习题(附答案)
  12. postgresql 累乘
  13. word 中的背景图片(浮动图形)怎么批量删除
  14. Android无埋点数据收集SDK关键技术解析
  15. [译]Hierarchical Macro Strategy Model for MOBA Game AI(王者荣耀)--翻译
  16. MUSDB18-HQ音乐分轨训练集和MUSDB调用方法
  17. 招商加盟竞价推广,怎么做才会有效果?
  18. 详解C语言最快关键字——register
  19. 微信墙如何搭建服务器地址,如何制作微信墙
  20. 2022级计算机保研历程

热门文章

  1. Springboot+Mysql房产中介在线买房卖房租房系统
  2. 基于JAVA+SpringMVC+MYSQL的网上订餐系统
  3. 小米笔试题:无序数组中最小的k个数
  4. 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)
  5. Ubuntu14.04中踩过的坑
  6. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
  7. 【MySQL】添加多个字段
  8. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度
  9. 由浅入深理解索引的实现(2)【转】
  10. QT 信号与槽 QT简单加法器的实现