C++ 中 count 函数用法笔记
1. 算法库全局函数:std::count
-
头文件 :
#include <algorithm> -
作用:统计指定范围内某个值出现的次数。
-
函数原型 :
count(first, last, val) -
参数说明:
first:起始迭代器。last:结束迭代器(左闭右开区间[first, last),不包含该位置)。val:要统计的目标值。
-
返回值:匹配元素的个数(整数类型),若未找到返回 0。
-
时间复杂度:O(n)(线性遍历)。
-
基础代码示例:
cpp1 std::vector<int> vec = {1, 2, 3, 3, 4, 3, 5}; 2 int cnt = std::count(vec.begin(), vec.end(), 3); // 结果为 3
2. 关联容器成员函数:container.count()
- 适用容器 :
std::set、std::multiset、std::map、std::multimap。 - 调用方式 :
my_container.count(val)(无需传入迭代器)。 - 时间复杂度:O(log n)(基于红黑树等底层结构,比全局函数更高效)。
- 特殊说明 :对于不允许重复元素的容器(如
set和map),返回值只能是 0 或 1,常用于判断元素是否存在。
3. 扩展:按条件统计 std::count_if
-
作用:统计范围内满足特定条件的元素个数。
-
参数说明:前两个参数为迭代器,第三个参数为谓词(如 Lambda 表达式)。
-
代码示例(统计偶数个数)
cpp1 int even_cnt = std::count_if(vec.begin(), vec.end(), [](int x){ 2 return x % 2 == 0; 3 });
4. 核心注意事项
- 头文件依赖 :使用全局
std::count或std::count_if必须包含<algorithm>。 - 比较运算符 :
std::count内部依赖operator==。若自定义类型未重载==,会编译报错,此时应改用count_if。 - 与 find 的区别 :
count返回匹配元素的数量 ;find返回指向第一个匹配元素的迭代器。