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个,那就无能为力了。

从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例

一、适配器 三种类型的适配器: 容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈、队列和优先级队列 迭代器适配器:(反向迭代器、插入迭代器、IO流迭代器) 函数适配器:函数适配器能够...

STL中bind2nd的用法

比如我们有下面的类: class ClxECS { public:     int DoSomething()      {          // 这里以输出一句话来代替具体的操作        ...

STL约束器之bind2nd(x, y)实例解析

今天看到STL(标准模板库)里的一个函数,也就是一个约束器--bind2nd(x, y),这个是一个模板函数,stl里面不止这么一个约束器,比如bind1st(x, y),相对而言bind2nd复杂一...

STL常用算法: distance实现,count_if算法实现,bind2nd的使用..

前面讲到用distance算法来返回两个迭代器之间的距离.下面给出实现:template int myDistance(T a, T b) { int distance = 0; i...

stl之bind1st,bind2nd解读(转)

stl之bind1st,bind2nd解读(转) 1、首先看一个容器的操作: void f(std::vector &vect) {     std::vector::iterator...
  • ilvu999
  • ilvu999
  • 2012年10月22日 10:57
  • 313

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

stl中 bind1st和 bind2nd  以及not1 等适配器的使用          以上总结部分拷贝自:http://blog.csdn.net/yzm365487848/article/...

【STL】bind1st与bind2nd函数解析

// bind1st和bind2nd函数把一个二元函数对象绑定成为一个一元函数对象。 // 但是由于二元函数对象接受两个参数,在绑定成为一元函数对象时需要将原来两个参数中的一个绑定下来。 // 也即通...

STL中bind1st和bind2nd之解析

今天看到>一书课后习题14.42,问题如下: 使用标准库函数对象及适配器定义一条表达式,令其:统计大于1024的值有多少个。 解题利用标准库函数对象类greater 答案为:count_if(ve...

STL中bind1st和bind2nd的区别

bind1st和bind2nd函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。为了达到这个目的,它们需要两个参数:要转换的bf和一个值(...
  • lalor
  • lalor
  • 2012年09月13日 16:33
  • 5621

bind2nd 和 bind1st【转】

注: 可以根据名字理解为 比较符号(> 本篇适合不熟悉这两个函数的读者         以前在使用stl的过程中发现bind1st和bind2nd这两个函数,当时不太理解什么意思,今天在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stl bind2nd
举报原因:
原因补充:

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