关闭

STL Function Objects

352人阅读 评论(4) 收藏 举报
分类:

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
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1795次
    • 积分:65
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档