类别:算法 | 组件类型:函数 |
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是在原始 STL 中定义的那一个,第一个版本是在 C++ 标准草案中定义的那一个;更改定义的原因是旧接口笨拙且容易出错。旧接口需要使用临时变量,该临时变量必须在调用之前初始化为 0count_if.
出于向后兼容性的原因,这两个接口当前都受支持 [1],但最终旧版本将被删除。
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++ 特性。当今许多编译器并未实现完备的标准;特别是,许多编译器不支持部分专业化。如果您的编译器不支持部分专业化,那么您将无法使用较新的版本接口使用.