Effective STL 39 Make predicates pure functions

Even const member functions may access mutable data members, non-const local static objects, non-const class staic objects. non-const objects at namespace scope, and non-const global objects.

find_if never called p, it called only a copy of p;

tmplate<typename FwdIterator, typename Predicate>

FwdIterator remove_if(FwdIterator begin, FwdIterator end, Predicate p) {
    begin = find_if(begin, end, p); 
    if (begin == end) return begin;
    else {
        FwdIterator next = begin;
        return remove_copy_if(++next, end, begin, p);
    }
}
class Predicate:
    public unary_function<Widget, bool> {
public:
    Predicate() {}
    bool operator()(const Widget&) const {
        return ++timesCalled == 3;
    }
private:
    static size_t timesCalled = 0;
};      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值