算法 for_each

来源:互联网 发布:bose蓝牙音响 知乎 编辑:程序博客网 时间:2024/04/30 12:53
#include <iostream>#include <vector>#include <algorithm>using namespace std;void print(int elem)  // void 函数,{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{private:long num;long sum;public:MeanValue() :num(0), sum(0){}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 = 0; i <= 9; ++i)ivec.push_back(i);for_each(ivec.begin(), ivec.end(), print);cout << endl;  // 输出是0,1,2,3,4,5,6,7,8,9MeanValue 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(), print);cout << endl; //输出是10,11,12,13,14,15,16,17,18,19,for_each(ivec.begin(), ivec.end(), AddValue<int>(*(ivec.begin())));for_each(ivec.begin(), ivec.end(), print);cout << endl; // 输出是 20,21,22,23,24,25,26,27,28,29,    double result = for_each(ivec.begin(), ivec.end(), MeanValue());cout << "平均值:" << result << endl;return 0;}

0 0
原创粉丝点击