首页 > STL编程 > STL bind1st bind2nd详解

STL bind1st bind2nd详解

先不要被吓到,其实这两个配接器很简单。
首先,他们都在头文件<functional>中定义。
其次,bind就是绑定的意思,而1st就代表first,2nd就代表second,现在名在可以很快记住了。
再次,他们的申明是一样的,都是(const Operation& op, const T& x)

简单的说,bind1st(const Operation& op, const T& x)就是这么一个操作:x op value,而bind2nd(const Operation& op, const T& x)就是这么一个操作:value op 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


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> STL bind1st bind2nd详解
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: STL编程 标签: , , ,
  1. 雅歌
    2010年12月1日11:18 | #1


    nCount = count_if(coll.begin(), coll.end(), bind1st(less(), 10));
    改为
    const binder1st< less > f1stA = bind1st( less(), 10 );
    nCount = count_if( coll.begin(), coll.end(), f1stA );
    更加说明细节

    同样

    nCount = count_if(coll.begin(), coll.end(), bind2nd(less(), 10));
    改为
    const binder2nd< less > f2ndA = bind2nd( less(), 10 );
    nCount = count_if( coll.begin(), coll.end(), f2ndA );

    [回复]

  2. 2010年12月1日12:22 | #2

    @雅歌
    学习

    [回复]

  3. 雅歌
    2010年12月1日14:13 | #3

    <int> 会被转义删除了,重新编辑如下:


    nCount = count_if(coll.begin(), coll.end(), bind1st(less(), 10));
    改为
    const binder1st< less< int > > f1stA = bind1st( less< int >(), 10 );
    nCount = count_if( coll.begin(), coll.end(), f1stA );
    更加说明细节

    同样

    nCount = count_if(coll.begin(), coll.end(), bind2nd(less(), 10));
    改为
    const binder2nd< less< int > > f2ndA = bind2nd( less< int >(), 10 );
    nCount = count_if( coll.begin(), coll.end(), f2ndA );

    [回复]

  4. 2010年12月1日21:02 | #4

    @雅歌
    被当成标签了,我贴的代码都是转换成HTML转义字符的<>

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.