📜  C++ STL-algorithm.count()函数(1)

📅  最后修改于: 2023-12-03 14:59:45.459000             🧑  作者: Mango

C++ STL-algorithm.count()函数

在C ++ STL之中,algorithm是一个重要的头文件。其中,count()函数是其中的一个非常有用的函数,可以报告在容器中指定值出现的次数。

count()函数的基础语法
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
  count (InputIterator first, InputIterator last, const T& val);
  • first 和 last 为迭代器,表示容器中元素的开始位置和结束位置;
  • val 表示要查找的值。

count()函数返回值为指定值val在[first, last)中出现的次数。

count()函数的使用方式

下面的代码演示了如何使用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()函数又需要遍历整个容器才能统计值的个数,如果使用了随机访问迭代器,遍历的效率会更高。

此外,count()函数只能统计相等的元素个数,不能统计满足某个条件的个数(如大于3的元素个数)。

count_if()函数

为了解决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);
  • first 和 last 为迭代器,表示容器中元素的开始位置和结束位置;
  • 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的出现次数。