现有标准 functor/function 检查是否等于 0?

Existing standard functor/function to check equality to 0?

我想计算无符号长整数向量中 0 的个数。是否有现有标准 function/functor 传递给 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。

std::count(data.begin(), data.end(), v); 会做的。 (尽管如果向量是 排序的 ,您可以使用 std::lower_boundstd::upper_bound 在 O(Log N) 中得到结果。

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