述語を純粋関数にしよう


EffectiveSTL第39項より。
え。この規則破ってるプログラムをどっかで書いた覚えがある。
やっべ。
gccはどうなっとんぞ

//3回operator()が呼び出された時true
struct Predicate
{
private:    
    size_t timeCalled;
public:
    Predicate()
            :timeCalled(0){}

    bool operator()(int hoge)
    {
        ++timeCalled;
        return timeCalled == 3;
    }

};

int main()
{
    vector<int> v;
    for(int i = 0 ; i < 10 ; ++i)
    {
        v.push_back(i);
    }

    v.erase( remove_if( v.begin() , v.end() , Predicate() ) , v.end() );
    copy( v.begin() , v.end() , ostream_iterator<int>(cout,"\n") );
}


結果

0
1
3
4
6
7
8
9


うわぁい駄目でした^q^