for_each()算法非常灵活,它可以不同的方式存取,处理,修改每一个元素
对于区间[beg,end)中的每个元素调用op(elem)
返回op的一个副本
op可以改变元素,注意它和transform的差别
op的任何返回值被忽略
复杂度:线性,numberofElement次
UnaryProc
for_each(InputIterator beg,InputIterator end,UnaryProc op)
用for_each()用于给定一个区间,然后重复执行某个函数,如下;
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
void print(int a){
cout<<a<<" ";
}
void charu(vector<int>&v,int begin,int last){
for(int i=begin;i<=last;++i){
v.push_back(i);
}
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
for_each(v.begin(),v.end(),print);
cout<<endl;
charu(v,10,20);
for_each(v.begin(),v.end(),print);
cout<<endl;
system("pause");
return 0;
}
for_each(v.begin(),v.end(),print)打印begin()--->v.end()之间的元素
此外可以用for_each()返回一个对象,如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class MeanValue{
private:
long num;
long sum;
public:
MeanValue():num(0),sum(0){}
void operator()(int elem){
num++;
sum+=elem;
}
double values(){
return static_cast<double>(sum)/static_cast<double>(num);
}
};
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
MeanValue mv=for_each(v.begin(),v.end(),MeanValue());
cout<<mv.values()<<endl;
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
与下面的代码等价
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class MeanValue{
private:
long num;
long sum;
public:
MeanValue():num(0),sum(0){}
void operator()(int elem){
num++;
sum+=elem;
}
operator double(){
return static_cast<double>(sum)/static_cast<double>(num);
}
};
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
double d=for_each(v.begin(),v.end(),MeanValue());
cout<<d<<endl;
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}