SGI

count_if

类别:算法 组件类型:函数

原型

Count_if是一个重载的名称:有两种count_if函数。
template <class InputIterator, class Predicate>
iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred);

template <class InputIterator, class Predicate, class Size>
void count_if(InputIterator first, InputIterator last, 
              Predicate pred,
              Size& n);

描述

Count_if查找在[first, last)满足谓词的元素数量pred。更确切地说,第一版本的count_if返回i中的迭代器数量[first, last)使得pred(*i)true。的第二个版本count添加到n迭代器的数量i中的迭代器数量[first, last)使得pred(*i)true.

的第二个版本count_if是在原始 STL 中定义的那一个,第一个版本是在 C++ 标准草案中定义的那一个;更改定义的原因是旧接口笨拙且容易出错。旧接口需要使用临时变量,该临时变量必须在调用之前初始化为 0count_if.

出于向后兼容性的原因,这两个接口当前都受支持 [1],但最终旧版本将被删除。

定义

在标准头文件 algorithm 中定义,以及非标准向后兼容性头文件 algo.h 中定义。

对类型的要求

对于采用三个参数的第一个版本对于采用四个参数的第二个版本

先决条件

对于第一个版本对于第二个版本

的最大值

复杂性线性。恰好last - firstpred.

的应用程序

int main() {
  int A[] = { 2, 0, 4, 6, 0, 3, 1, -7 };
  const int N = sizeof(A) / sizeof(int);

  cout << "Number of even elements: " 
       << count_if(A, A + N, 
                   compose1(bind2nd(equal_to<int>(), 0), 
                            bind2nd(modulus<int>(), 2)))
       << endl;
} 

示例

注释count[1]接口使用iterator_traitscount类,它依赖于称为部分专业化的 C++ 特性。当今许多编译器并未实现完备的标准;特别是,许多编译器不支持部分专业化。如果您的编译器不支持部分专业化,那么您将无法使用较新的版本接口使用.

或涉及

count, 的任何其他 STL 组件, 另请参阅
[Silicon Surf] [STL Home]
find find_if