c ++ algorithm - count_if对象中的第3个参数

时间:2016-03-11 03:24:24

标签: c++ algorithm parameters countif

如果我试图在另一个类中传递一个函数,我无法理解如何使用count_if的第三个参数。当我在类之外创建bool函数时似乎没有任何问题,但是当我尝试将类内部的bool函数传递给count_if的第3个参数时,我收到“函数调用缺少参数列表”错误。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//bool greater(int i); // this works

class testing {
    vector<int> vec;
public:
    testing(vector<int> v) {
        vec = v;
    }

    bool greater(int i) { // this doesn't work
        return i > 0;
    }

    void add(int i) {
        vec.push_back(i);
    }

    void display() {
        for (size_t j = 0; j < vec.size(); j++)
            cout << vec[j] << endl;
    }
};

int main() {
    vector<int> vec;
    testing t(vec);
    for (int i = 0; i < 5; i++) {
        t.add(i);
    }
    t.display();

    //cout << count_if(vec.begin(), vec.end(), greater); // this works
    cout << count_if(vec.begin(), vec.end(), t.greater); // this doesn't work

    system("pause");
    return 0;
}

/*bool greater(int i) { // this works
    return i > 0;
}*/

1 个答案:

答案 0 :(得分:0)

您可以将函数作为第三个参数传递给count_if()。你不能做的是通过一个类方法。

greater()是一种类方法。这意味着它不是一个独立的函数,它是一个类实例的方法。

这里做什么?只需将其设为静态类函数:

static bool greater(int i) { // this now works.
    return i > 0;
}