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
}