STL算法(14)——for_each()

来源:互联网 发布:ubuntu 压缩 编辑:程序博客网 时间:2024/05/21 21:13

for_each(b,e,p)// 对容器中的数据进行遍历  b和e是一对儿迭代器 p是一个函数或者是函数对象 

使用for_each()算法遍历数据

使用for_each()和函数对象修改数据

使用for_each()返回值

#include<iostream>#include<algorithm>#include<vector>using namespace std;void print(int elem){cout << elem << ' ';}// 函数对象template<class T>class AddValue{private:T theValue;public:AddValue(const T &v) : theValue(v){};void operator()(T &elem)const{elem += theValue;}};class MeanValue{public:long num;long sum;public:MeanValue() :num(0), sum(0){}// 定义operator 使其成为函数对象void operator()(int elem){num++;sum += elem;}double value(){return static_cast<double>(sum) / static_cast<double>(num);}operator double()// 类型转换运算符重载{return static_cast<double>(sum) / static_cast<double>(num);}};int main(){vector<int> ivec;for (int i = 1; i <= 9; i++)ivec.push_back(i);cout << endl;for_each(ivec.begin(), ivec.end(), print);cout << endl;MeanValue mv = for_each(ivec.begin(), ivec.end(), MeanValue());cout << "平均值:" << mv.value() << endl;//for_each(ivec.begin(), ivec.end(), AddValue<int>(10));for_each(ivec.begin(), ivec.end(), AddValue<int>(*ivec.begin()));for_each(ivec.begin(), ivec.end(), print);cout << endl;double result = for_each(ivec.begin(), ivec.end(), MeanValue());cout << "平均值:" << result << endl;//system("pause");return 0;}



0 0
原创粉丝点击