标准库里的count()、count_if()函数

标准库组件里的count()、count_if()函数

使用一个东西,不明白它的道理,不高明
——侯捷老师

1.count()函数

1.1、功能

对序列里指定值进行计数

1.2、使用方式

template
  typename iterator_traits::diference_type count(InputIterator first, InputIterator last, const T& val);

1.3、函数等价操作实现

template
  typename iterator_traits::diference_type count(InputIterator first, InputIterator last, const T& val) {
  typename iterator_traits::difference_type res = 0;
  while (first != last) {
  if (*first == val) {
    ++res;
  }
  ++first;
}

1.4 参数详解

  • first,last

输入迭代器,分别指向输入序列的第一个和最后一个位置的下一个位置;区间表示为[first, last)

  • val

待匹配的值

1.5、返回值

返回值类型是一个整数类型,通过萃取机制获得类型信息:iterator_traits::difference_type

1.6、示例程式

#include
#include
#include

using namespace std;

int main() {
    int arr[7] = {10, 20, 20, 30, 10, 40, 10};
    int cnt = std::count(arr, arr+7, 10);
    cout << "10 appears: " << cnt << endl;
    
    return 0;
}

输出结果

10 appears: 3

1.7、参考链接

http://www.cplusplus.com/reference/algorithm/count/

2.count_if()函数

2.1 功能

统计序列里满足条件的个数

2.2 使用方式

template 
  typename iterator_traits::difference_type
    count_if (InputIterator first, InputIterator last, UnaryPredicate pred);

2.3 等价操作实现

template 
  typename iterator_traits::difference_type
    count_if (InputIterator first, InputIterator last, UnaryPredicate pred) {
  typename iterator_traits::difference res = 0;
  while (first != last) {
    if (pred(*first)) ++res;
    ++first;
  }
  return res;
}

2.4 参数详解

  • first,last

同count

  • pred

谓词,判断序列里元素是否满足的条件,可以是一个函数对象或函数指针

2.5 返回值

满足条件的元素个数

2.6 示例程式

#include 
#include
#include

using namespace std;

int main() {
    vector vec = {1,2,3,4,5};
    int cnt = std::count_if(vec.begin(), vec.end(), [](int i) {
        return i % 2 == 0;
    });
    cout << "vec = [1,2,3,4,5]中偶数个数为:" << cnt << endl;
    return 0;
}

输出结果

image.png

2.7 参考链接

http://www.cplusplus.com/reference/algorithm/count_if/

你可能感兴趣的:(标准库里的count()、count_if()函数)