bind1st bind2snd解析
2015-12-11 14:12
274 查看
头文件:#include <algorithm>
先不要被吓到,其实这两个配接器很简单。
首先,他们都在头文件<functional>中定义。
其次,bind就是绑定的意思,而1st就代表first,2nd就代表second,现在名在可以很快记住了。
再次,他们的申明是一样的,都是(const Operation& op, const T& x)。
简单的说,bind1st(const Operation& op, const T& x)就是这么一个操作:x operation value,而bind2nd(const Operation& op, const T& x)就是这么一个操作:value operation x,其中value是被应用bind的对象。这两个配接器都用于将一个二元算子转换成一个一元算子。下面来看一段代码吧!
程序的输出结果是0 9
来自:http://www.programlife.net/stl-bind1st-bind2nd-demo.html
如果某个函数或函数对象调用需要两个参数,bind1st会邦定我们在调用bind1st的函数调用表达式中给出的参数为函数对象的第一个参数,而形成一个新的函数对象,也就是将一个二元(两个参数)函数对象的第一个参数固定下来,而形成一个新的只需要一个参数的一元函数对象,而将这个新的函数对象应用到算法时,相当于只有一个参数了(第一个参数已经被绑定),这时候情况就跟上面的例子完全相同了。例如:
void print(int standard,int n) // 创建一个需要两个参数的函数
{
if(n>=standard)
cout<
}
int main()
{
vector v = {63,47,93,75};
// 打印容器中大于60的数据
for_each(v.begin(),v.end(),
bind1st(ptr_fun(print),60)); // 这里,ptr_fun的作用是将一个函数指针构造成一个函数对象(你也可以直接使用函数对象),而bind1st就是帮定这个函数对象的第一个参数为60,也就是standard为60,整个函数变为print(60, int n),只有一个参数了,这是完全跟上面的例子相同了。
return 0;
}
bind2nd的原理是一样的,只不过是为了邦定函数的第二个参数。
而在新标准C++11中,还有bind函数,可以帮定更多参数。这些函数的使用是有点复杂,多加练习,熟悉后就好了。
来自:http://imcc.blogbus.com/logs/162062257.html
先不要被吓到,其实这两个配接器很简单。
首先,他们都在头文件<functional>中定义。
其次,bind就是绑定的意思,而1st就代表first,2nd就代表second,现在名在可以很快记住了。
再次,他们的申明是一样的,都是(const Operation& op, const T& x)。
简单的说,bind1st(const Operation& op, const T& x)就是这么一个操作:x operation value,而bind2nd(const Operation& op, const T& x)就是这么一个操作:value operation x,其中value是被应用bind的对象。这两个配接器都用于将一个二元算子转换成一个一元算子。下面来看一段代码吧!
//Coded by www.programlife.net #include <iostream> #include <functional> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> coll; for(int i = 1; i <= 10; ++i) { coll.push_back(i); } //查找元素值大于10的元素的个数 //也就是使得10 < elem成立的元素个数 int res = count_if(coll.begin(), coll.end(), bind1st(less<int>(), 10)); cout << res << endl; //查找元素值小于10的元素的个数 //也就是使得elem < 10成立的元素个数 res = count_if(coll.begin(), coll.end(), bind2nd(less<int>(), 10)); cout << res << endl; return 0; }
程序的输出结果是0 9
来自:http://www.programlife.net/stl-bind1st-bind2nd-demo.html
如果某个函数或函数对象调用需要两个参数,bind1st会邦定我们在调用bind1st的函数调用表达式中给出的参数为函数对象的第一个参数,而形成一个新的函数对象,也就是将一个二元(两个参数)函数对象的第一个参数固定下来,而形成一个新的只需要一个参数的一元函数对象,而将这个新的函数对象应用到算法时,相当于只有一个参数了(第一个参数已经被绑定),这时候情况就跟上面的例子完全相同了。例如:
void print(int standard,int n) // 创建一个需要两个参数的函数
{
if(n>=standard)
cout<
}
int main()
{
vector v = {63,47,93,75};
// 打印容器中大于60的数据
for_each(v.begin(),v.end(),
bind1st(ptr_fun(print),60)); // 这里,ptr_fun的作用是将一个函数指针构造成一个函数对象(你也可以直接使用函数对象),而bind1st就是帮定这个函数对象的第一个参数为60,也就是standard为60,整个函数变为print(60, int n),只有一个参数了,这是完全跟上面的例子相同了。
return 0;
}
bind2nd的原理是一样的,只不过是为了邦定函数的第二个参数。
而在新标准C++11中,还有bind函数,可以帮定更多参数。这些函数的使用是有点复杂,多加练习,熟悉后就好了。
来自:http://imcc.blogbus.com/logs/162062257.html
相关文章推荐
- 各种距离的计算
- hadoop2.5.1+Hbase0.98安装
- springmvc-自定义标签-taglib
- calendar控件时间比较
- Ubuntu14.04忘记root密码的解决方法
- ABAP 发送邮件的两种方式
- 使用Gitbook制作电子书
- Android自动填充短信验证码
- jquery获取选中radio的值
- 拉丁猪文字游戏
- Bag of Words(词袋模型)
- 黑马程序员——Java基础---数据类型
- wc
- Android 事件分发机制
- 游戏应用快速审核上架
- resin4的jersery(jws)的兼容问题
- 如何允许 WinXP 和 Win7 自动创建 dump 文件
- 三重奏
- Linux下amr转mp3方法
- 给Salt-Master添加增强版的白名单功能