现有的标准仿函数/函数检查等于0?

时间:2016-06-10 07:21:07

标签: c++ stl c++98

我想计算无符号长整数向量中0的数量。是否存在传递给std::count_if的现有标准函数/函子?或者我自己就像这个例子一样写它?

class is_equal
{
  private:
    unsigned long int v;
  public:
    is_equal(unsigned long int value) : v(value) {}
    bool operator () (unsigned long int x) { return x == this->v; }
};

unsigned long int count_zero(const std::vector<unsigned long int>& data)
{
  return std::count_if(data.begin(), data.end(), is_equal(0));
}

注意:出于兼容性原因,我不会使用C ++ 11。

1 个答案:

答案 0 :(得分:7)

std::count(data.begin(), data.end(), v);会这样做。 (虽然如果向量已排序,您可以使用std::lower_boundstd::upper_bound在O(日志N)中获得结果。

您只需要确保v 完全与vector元素相同的类型 - 除非您告诉编译器您要使用哪个模板实例化。