stl bind2nd

转载 2015年07月10日 17:54:18

 比如我们有下面的类:

class ClxECS
{
public:
    int DoSomething() 
    { 
        // 这里以输出一句话来代替具体的操作
        cout << "Output from method DoSomething!" << endl; 
        return 0; 
    };
};


    和下面的一个vector:

vector<ClxECS*> vECS;

for (int i = 0; i < 13; i++)
{
    ClxECS *pECS = new ClxECS;
    vECS.push_back(pECS);
}


    如果要对容器vECS中的所有对象都进行DoSomething()的操作,可以用下面的方法:

for_each(vECS.begin(), vECS.end(), mem_fun(&ClxECS::DoSomething));

    (关于mem_fun的用法可以参考我的那篇《STL中mem_fun和mem_fun_ref的用法》
    当然,我们也可以用下面的方法:

int DoSomething(ClxECS *pECS)
{
    return pECS->DoSomething();
}

for_each(vECS.begin(), vECS.end(), &DoSomething);


    从上面的代码可以看到,两种方法其实都是调用类ClxECS的DoSomething()方法。在这里,方法DoSomething()是没有参数的,如果这个方法像下面那样是有参数的,该用什么方法传递参数呢?

class ClxECS
{
public:
    int DoSomething(int iValue)
    {
        cout << "Do something in class ClxECS!" << endl;
        cout << "The input value is: " << iValue << endl;
        return 0;
    }
};


    这个时候就该我们的bind2nd登场了!下面是具体的代码:

// mem_fun1是mem_fun支持一个参数的版本
for_each(vECS.begin(), vECS.end(), bind2nd(mem_fun1(&ClxECS::DoSomething), 13));

    或者:

int DoSomething(ClxECS *pECS, int iValue)
{
    return pECS->DoSomething(iValue);
}

for_each(vECS.begin(), vECS.end(), bind2nd(ptr_fun(DoSomething), 13));


    从上面的代码可以看出,bind2nd的作用就是绑定函数子的参数的。可是STL只提供了对一个参数的支持。如果函数的参数多于1个,那就无能为力了。

STL: bind1st, bind2nd 的使用(C++)

bind1st 和 bind2nd 函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。它们均需要两个参数:要转换的 fn 和一个值 x。简...
  • zhangpiu
  • zhangpiu
  • 2015年11月17日 14:10
  • 813

STL中bind库使用

如果大家不了解了STL中的bind的话,可以先看一下下面的二中对STL:::bind1st的分析。通过对比我们就可以清楚的明白为什么要有boost了。 一、Boost.Bind 是这样的一个库,它简...
  • shun01
  • shun01
  • 2013年01月23日 20:57
  • 703

bind1nd,not1,compose1等用法

原文地址:http://weimingtom.iteye.com/blog/965824 binder/not 1-允许为二元仿函数或判断式绑定一个值,从而将那个值固定下来。 2-可以绑定第一个或...
  • wodeyijia911
  • wodeyijia911
  • 2014年02月20日 20:10
  • 1041

STL 函数对象

函数对象分类 函数对象是重载了operator()的类的一个实例,operator()是函数调用运算符。标准C++库根据operator()参数个数为0个,1个,2个加以划分的。主要有以下3...
  • u014634338
  • u014634338
  • 2014年07月05日 19:48
  • 478

【STL】bind1st与bind2nd函数解析

bind1st 和bind2nd是两个配接器 在头文件中定义。 1st代表first,2nd代表second.作用是把一个二元函数对象绑定为一个一元函数对象。STL使用bind1st和bind2n...
  • Vincentlmeng
  • Vincentlmeng
  • 2017年06月27日 16:42
  • 344

STL:从for_each到函数对象再到bind函数

这篇讲得实在太好了,忍不住转啦 转自:http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520477.html Abstract...
  • ylf13
  • ylf13
  • 2014年03月06日 18:23
  • 1225

STL源码学习——仿函数和配接器

仿函数 仿函数又称函数对象,它本质上是 一种具有函数特质的对象,它 重载了operator()运算符,我们可以像使用函数一样使用该对象。 比如: template class T> stru...
  • jiange_zh
  • jiange_zh
  • 2016年03月06日 13:44
  • 1798

stl中 bind1st和 bind2nd 以及not1等适配器的使用

stl中 bind1st和 bind2nd  以及not1 等适配器的使用          以上总结部分拷贝自:http://blog.csdn.net/yzm365487848/article/...
  • tangaowen
  • tangaowen
  • 2012年05月08日 19:56
  • 3712

解析bind1st和bind2nd的使用

解析bind1st和bind2nd的使用1、首先看一个容器的操作:void f(std::vector &vect){    std::vector::iterator firstOne;    fo...
  • ych1
  • ych1
  • 2006年12月05日 09:35
  • 4869

STL bind1st bind2nd详解

首先,他们都在头文件中定义。 其次,bind就是绑定的意思,而1st就代表first,2nd就代表second,现在名在可以很快记住了。 再次,他们的申明是一样的,都是(const Operati...
  • forrestGTJU
  • forrestGTJU
  • 2012年06月13日 10:54
  • 491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stl bind2nd
举报原因:
原因补充:

(最多只允许输入30个字)