bind1st bind2nd的使用

来源:互联网 发布:windows10怎么切换mac 编辑:程序博客网 时间:2024/05/18 15:27


bind1st和bind2nd函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。为了达到这个目的,它们需要两个参数:要转换的bf和一个值(v)。

bind1st和bind2nd允许为二元仿函数或判断式绑定一个值,从而将那个值固定下来。你可以绑定第一个或者第二个参数。随即,二元仿函数会变成一元仿函数。比如:

f = std::bind1st( functor, v); 'f( x)'等价于'functor( v, x)'
f = std::bind2nd( functor, v); 'f( x)'等价于'functor( x, v)'

先举两个例子看看bind1st和bind2nd的用法。
 

int a[] = {1, 2, 100, 200};std::vector< int> arr(a, a + 4);1. // 移除所有小于100的元素arr.erase( std::remove_if( arr.begin(),  arr.end(),    std::bind2nd( std::less< int>(), 100)), arr.end()); 这里的比较表达式相当于arr.value < 1002. 如果用bind1st则表达的意思就恰恰相反// 移除所有大于100的元素arr.erase( std::remove_if( arr.begin(),  arr.end(),    std::bind1st( std::less< int>(), 100)), arr.end()); 这里的表达式相当于100 < arr.value3. 当然为了实现删除大于100的元素你同样可以使用bind2nd// 移除所有大于100的元素arr.erase( std::remove_if( arr.begin(),  arr.end(),    std::bind2nd( std::greater< int>(), 100)), arr.end()); 4. 前面说道=的比较,比如说x <= k怎么实现呢,std又提供了一个好东西not1,我们可以说 !(x > k) 和 x <= k是等价的,那么我们看看下面的表达式:// 移除所有小于等于100的元素arr.erase( std::remove_if( arr.begin(),  arr.end(),    std::not1(std::bind2nd( std::greater< int>(), 100))), arr.end()); 说明:not1是否定返回值是单目的函数,std中还有not2它是否定返回值是双目的函数


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二年级小孩拼音差怎么办 小学三年级数学60多分怎么办 孩子三年级了数学不开窍怎么办 初二数学太差该怎么办 孩子语文阅读理解能力差怎么办 5年级数学不开窍怎么办 一年级孩子数学不开窍怎么办 三年级孩子数学成绩差怎么办 孩子三年级数学太差怎么办 三年级孩子数学理解能力差怎么办 教小孩做作业老是发火怎么办 孩子拿笔重写字太黑怎么办 教小孩写不到汉字怎么办 一年级孩子数学理解能力差怎么办 小孩一年级数学学不好怎么办 孩子一年级数学学不好怎么办 小学一年级数学学不好怎么办 孩子一年级数学成绩不好怎么办 成绩差的孩子该怎么办 面对成绩差的孩子该怎么办 六年级数学成绩差该怎么办 孩子数学物理成绩差该怎么办 高三成绩很差该怎么办 孩子学习成绩差家长该怎么办 孩子一年级语文成绩不好怎么办 孩子上网成瘾不听父母话怎么办 10岁数学不开窍怎么办 孩子五年级数学不好怎么办 一岁宝宝难断奶怎么办 2岁宝宝断不了奶怎么办 快2岁宝宝不听话怎么办 2岁半的宝宝不听话怎么办 3岁宝宝哭闹不止怎么办 2岁宝宝爱打人怎么办 两周岁宝宝吃东西就吐怎么办 两周岁宝宝不爱吃饭怎么办 两周岁宝宝反复发烧怎么办 两周岁宝宝咳嗽厉害怎么办 2岁宝宝体内有火怎么办 4岁宝宝数都不会怎么办 两岁宝宝太撅怎么办