STL Function Objects

STL Function Objects

  • mem_fun &mem_fun_ref

Test code:

   void foo (const std::vector<Person>& coll)
   {
       using std::for_each;
       using std::bind2nd;
       using std::mem_fun_ref;


        //call member function print() for each element
        for_each (coll.begin(), coll.end(),
                  mem_fun_ref(&Person::Print));


        //call member function printWithPrefix() for each element
        //-"person: " is passed as an argument to the member function
        for_each (coll.begin(), coll.end(),
                  bind2nd (mem_fun_ref (&Person::printWithPrefix),
                           "person: "));
    }

equal:

for(int i=0;i<coll.size();i++)
{
    coll[i].Print();
}

对于stl的使用,近最大可能不使用自己定义的循环,而是使用for_eash;

mem_fun_ref mem_fun 的区别。

当容器中存放的是对象实体的时候用mem_fun_ref,当容器中存放的是对象的指针的时候用mem_fun


  • bind2nd:

           
void foo_bind2mind(const std::vector<Person>& coll)
{
  using std::for_each;
  using std::bind2nd;
  using std::mem_fun_ref;


   //call member function print() for each element
   for_each (coll.begin(), coll.end(),
             mem_fun_ref(&Person::print));


   //call member function printWithPrefix() for each element
   //-"person: " is passed as an argument to the member function
   for_each (coll.begin(), coll.end(),
             bind2nd (mem_fun_ref (&Person::printWithPrefix),
                      "person: "));//bind2nd "persion" is the paramter transfer to printWithPrefix by using bind2nd
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值