• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ STL bind1st bind2nd bind 的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

说明

bind1st()bind2nd(),在 C++11 里已经 deprecated 了,建议使用新标准的 bind()
下面先说明bind1st()bind2nd()的用法,然后在说明bind()的用法。

头文件

#include <functional>

作用

bind1st()bind2nd()都是把二元函数转化为一元函数,方法是绑定其中一个参数。
bind1st()是绑定第一个参数。
bind2nd()是绑定第二个参数。

例子


#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    int numbers[] = { 10,20,30,40,50,10 };
    int cx;
    cx = count_if(numbers, numbers + 6, bind2nd(less<int>(), 40));
    cout << "There are " << cx << " elements that are less than 40.\n";

    cx = count_if(numbers, numbers + 6, bind1st(less<int>(), 40));
    cout << "There are " << cx << " elements that are not less than 40.\n";

    system("pause");
    return 0;
}


There are 4 elements that are less than 40.
There are 1 elements that are not less than 40.

分析
less()是一个二元函数,less(a, b)表示判断a<b是否成立。

所以bind2nd(less<int>(), 40)相当于x<40是否成立,用于判定那些小于40的元素。

bind1st(less<int>(), 40)相当于40<x是否成立,用于判定那些大于40的元素。

bind()

bind1st()bind2nd(),在 C++11 里已经 deprecated 了.bind()可以替代他们,且用法更灵活更方便。

上面的例子可以写成下面的形式:

 

#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    int numbers[] = { 10,20,30,40,50,10 };
    int cx;
    cx = count_if(numbers, numbers + 6, bind(less<int>(), std::placeholders::_1, 40));
    cout << "There are " << cx << " elements that are less than 40.\n";

    cx = count_if(numbers, numbers + 6, bind(less<int>(), 40, std::placeholders::_1));
    cout << "There are " << cx << " elements that are not less than 40.\n";

    system("pause");
    return 0;
}

std::placeholders::_1 是占位符,标定这个是要传入的参数。
所以bind()不仅可以用于二元函数,还可以用于多元函数,可以绑定多元函数中的多个参数,不想绑定的参数使用占位符表示。
此用法更灵活,更直观,更便捷。

参考

http://www.cplusplus.com/reference/functional/bind1st/
http://www.cplusplus.com/reference/functional/bind2nd/
http://www.cplusplus.com/reference/functional/bind/



作者:book_02
链接:https://www.jianshu.com/p/f337f42822fe
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#.netPDF文件预览发布时间:2022-07-13
下一篇:
Knn算法C++实现发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap