STL binder1st binder2nd bind1st bind2nd区别

binder**和bind**功能对应。只是binder**是类绑定器,bind**为全局函数绑定器而已。

1st和2nd很好理解。一个是第一个参数不变,一个是第二个参数不变。

参看程序:

#include "stdafx.h"

#include <iostream>
#include <algorithm>	// count_if
#include <functional>	// binder
#include <list>

using namespace std;

int main()
{
	// Data
	int iarray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	list<int> aList(iarray, iarray + 10);

	// binder和bind区别:
	// 1. 类绑定器有binder1st和binder2nd,而函数绑定器是bind1st和bind2nd
	// 2. bind是一个全局的模板函数其返回值为一个binder模板类的实例
	// 3. binder要指定泛型
	int k = count_if(aList.begin(), aList.end(), binder1st<greater<int>>(greater<int>(), 5));

	// bind1st bind2nd功能比较
	// k = count_if(aList.begin(), aList.end(), bind1st(greater<int>(), 5)); 
	// bind1st(greater<int>(), 5); //---->5 > x 即5作为第一个固定参数。返回5大于的数字的个数
	// bind2nd(greater<int>(), 5); //---->x > 5 即5作为第二个固定参。返回大于5的数字的个数

	cout << k << endl;

	system("pause");
	return 0;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值