下面这个示例中,先定义了一个函数对象counter(struct里定义函数)。这个函数对象需要一个Cond的函数对象,它是个条件判断函数,如果满足条件,则加 1,否则加 0。
然后,用上面的counter函数对象和reduce函数共同来打造一个counter_if算法
当条件满足的时候我就记个数,也就是统计满足某个条件的个数。
//对象counter,满足Cond函数的条件,就将参数c 加 1。 template<class T, class Cond> struct counter { size_t operator()(size_t c, T t) const { return c + (Cond(t) ? 1 : 0); } }; //count_if函数,返回上面文章中编写使用的reduce函数 template<class Iter, class Cond> size_t count_if(Iter begin, Iter end, Cond c){ return reduce(begin, end, 0, counter<Iter::value_type, Cond>(c)); }当我需要统计薪资超过 1 万元的员工的数量时,参数3为Cond条件函数,{ return e.salary > 10000; }一行代码就完成了
size_t cnt = count_if(staff.begin(), staff.end(), { return e.salary > 10000; }); 函数式编程 修饰器模式 面向对象编程 原型编程范式 逻辑编程范式前两小段,是编程范式的简单介绍,C语言到C++的演化,
未完待续。。。。。