bind2nd使用

template <class Operation, class T>
binder2nd<Operation> bind2nd (const Operation& op, const T& x);

bind2nd是一个函数配接器,目的是将二元仿函数转换为一元仿函数,可以将第二参数传给第一参数(二元仿函数),作为二元仿函数的第二参数。常用于泛型算法中的谓词出现。

使用1.

#include <functional>
struct GT : public binary_function<string, int, bool> {
  bool operator() (const string& s, const int& len) const {
    return s.size() >= len;
  }
};

int main() {
  vector<string> vec;
  string word;
  while(cin >> word && (word.compare("#") != 0)) {
    vec.push_back(word);
  }
  int m = count_if(vec.begin(), vec.end(), bind2nd(GT(), 3));
  cout << "gt 3:" << m << endl;
  return 1;
}

定义一个仿函数,继承binary_function。注意的是重载函数() 必须声明为const、参数也为const,与bind2nd类型保持一致,否则编译通不过。

使用2.

bool GTLen(string s,int len){
  return s.size() >= len;
}
int i = count_if(vec.begin(), vec.end(), bind2nd(ptr_fun(GTLen),4));
cout << "gt 4:" << i << endl;

定义一个二元函数,利用ptr_fun函数配接器,将函数指针转换为仿函数。此方法简单,省略了结构体或类的定义。

template <class Arg, class Result>
  pointer_to_unary_function<Arg,Result> ptr_fun (Result (*f)(Arg));

template <class Arg1, class Arg2, class Result>
  pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*f)(Arg1,Arg2));




 

转载于:https://www.cnblogs.com/whuqin/archive/2012/10/10/4982029.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值