标准库<algorithm>组件里的count()、count_if()函数
使用一个东西,不明白它的道理,不高明
——侯捷老师
1.count()函数
1.1、功能
对序列里指定值进行计数
1.2、使用方式
template<class InputIterator, class T>
typename iterator_traits<InputIteartor>::diference_type count(InputIterator first, InputIterator last, const T& val);
1.3、函数等价操作实现
template<class InputIterator, class T>
typename iterator_traits<InputIteartor>::diference_type count(InputIterator first, InputIterator last, const T& val) {
typename iterator_traits<InputIterator>::difference_type res = 0;
while (first != last) {
if (*first == val) {
++res;
}
++first;
}
1.4 参数详解
- first,last
输入迭代器,分别指向输入序列的第一个和最后一个位置的下一个位置;区间表示为[first, last)
- val
待匹配的值
1.5、返回值
返回值类型是一个整数类型,通过萃取机制获得类型信息:iterator_traits<InputIterator>::difference_type
1.6、示例程式
#include<iostream>
#include<vector>
#include<algorithm>
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、参考链接
2.count_if()函数
2.1 功能
统计序列里满足条件的个数
2.2 使用方式
template <class InputIterator, class UnaryPredicate>
typename iterator_traits<InputIterator>::difference_type
count_if (InputIterator first, InputIterator last, UnaryPredicate pred);
2.3 等价操作实现
template <class InputIterator, class UnaryPredicate>
typename iterator_traits<InputIterator>::difference_type
count_if (InputIterator first, InputIterator last, UnaryPredicate pred) {
typename iterator_traits<InputIterator>::difference res = 0;
while (first != last) {
if (pred(*first)) ++res;
++first;
}
return res;
}
2.4 参数详解
- first,last
同count
- pred
谓词,判断序列里元素是否满足的条件,可以是一个函数对象或函数指针
2.5 返回值
满足条件的元素个数
2.6 示例程式
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<int> 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;
}