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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值