现有标准 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_bound
和 std::upper_bound
在 O(Log N) 中得到结果。
您只需确保 v
与矢量元素 完全 类型相同 - 除非您告诉编译器您要使用哪个模板实例化。
我想计算无符号长整数向量中 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_bound
和 std::upper_bound
在 O(Log N) 中得到结果。
您只需确保 v
与矢量元素 完全 类型相同 - 除非您告诉编译器您要使用哪个模板实例化。