📅  最后修改于: 2023-12-03 14:59:45.459000             🧑  作者: Mango
在C ++ STL之中,algorithm是一个重要的头文件。其中,count()函数是其中的一个非常有用的函数,可以报告在容器中指定值出现的次数。
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count (InputIterator first, InputIterator last, const T& val);
count()函数返回值为指定值val在[first, last)中出现的次数。
下面的代码演示了如何使用count()函数来统计容器中特定的值出现的次数:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
vector<int> v {1, 2, 3, 2, 2, 1};
int n = count(v.begin(), v.end(), 2); // 统计2出现的次数
cout << "The number of 2s in the vector is: " << n << endl;
return 0;
}
输出结果为:
The number of 2s in the vector is: 3
上面的代码中,使用了count()函数统计了容器v中元素值为2的出现次数。
count()函数有一定的局限性,它只能用于顺序容器(序列容器),因为指针迭代器是没有随机访问的能力的,而count()函数又需要遍历整个容器才能统计值的个数,如果使用了随机访问迭代器,遍历的效率会更高。
此外,count()函数只能统计相等的元素个数,不能统计满足某个条件的个数(如大于3的元素个数)。
为了解决count()函数的局限性,STL还提供了一个count_if()函数,除了可以统计元素相等的个数,还可以统计满足一定条件的元素的个数。
count_if()函数的基础语法如下:
template <class InputIterator, class UnaryPredicate>
typename iterator_traits<InputIterator>::difference_type
count_if (InputIterator first, InputIterator last, UnaryPredicate pred);
count_if()函数返回值为满足谓词函数的元素的个数。
下面的代码演示了如何使用count_if()函数来统计vector容器中大于2的元素个数:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
vector<int> v {1, 2, 3, 4, 5, 6, 7};
int n = count_if(v.begin(), v.end(), [](int i){ return i>2; }); // 统计大于2的元素个数
cout << "The number of elements greater than 2 is: " << n << endl;
return 0;
}
输出结果为:
The number of elements greater than 2 is: 5
上面的代码中,使用了count_if()函数统计了容器v中元素值大于2的出现次数。