STL for_each,find_if用法

C/C++ code
    
    
    
    
template < class InputIterator, class Function > Function for_each(InputIterator first, InputIterator last, Function f) { for ( ; first != last; ++ first ) f( * first); return f; }


上面是for_each的源码。

for_each(l.begin(),l.end(),print());的时候,print()是一个对象,没有名称的对象,
然后传递到f(*first)的时候,实际上就是print()(*first);
print()既然为一个对像,假定为a,也就是a(*first);而这就将调用operator().

 

/---------------------------------------for_each-----------------------------------

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

struct print
{
int count;
print(){count = 0;}
void operator()(int x)
{
   cout << 3 * x << endl;
   count++;
}
};
int main(void)
{

list<int> l;
l.push_back(29);
l.push_back(32);
l.push_back(16);
l.push_back(22);
l.push_back(27);

print p = for_each(l.begin(), l.end(), print());
cout << p.count << endl;
return 0;
}

//--------------------------------find_if--------------------------------------------------------

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

bool divby5(int x)
{
return x % 5 ? 0 : 1;
};
int main(void)
{

list<int> l;
l.push_back(29);
l.push_back(32);
l.push_back(16);
l.push_back(22);
l.push_back(25);
l.push_back(27);

list<int>::iterator iLocation;
iLocation = find_if(l.begin(), l.end(), divby5);
if (iLocation != l.end())
{
   cout << *iLocation << endl;
}
return 0;
}

 

你可能感兴趣的:(function,iterator,Class,each)