当前位置: 首页 > news >正文

C++STL---count() 统计容器中特定元素出现次数

在 C++ 标准库中,count 是一个用于统计容器中特定元素出现次数的函数,定义在 <algorithm> 头文件中。它可以快速计算某个值在容器(如数组、vector、list 等)中出现的次数,避免手动编写循环计数的麻烦。

一、函数原型

count 函数有两种常用形式(以 vector<int> 为例):

// 1. 统计 [first, last) 范围内等于 value 的元素个数
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value);
  • 参数说明
    • first:容器的起始迭代器(指向要统计的范围的第一个元素)。
    • last:容器的结束迭代器(指向要统计的范围的最后一个元素的下一个位置)。
    • value:要统计出现次数的目标值。
  • 返回值:目标值 value[first, last) 范围内出现的次数(类型为迭代器的差值类型,通常可视为 int)。

二、使用场景与示例

count 函数适用于所有支持迭代器的容器(如 vectorarrayliststring 等),核心作用是快速统计特定元素的出现次数

示例 1:统计 vector 中特定元素的次数
#include <iostream>
#include <vector>
#include <algorithm>  // 必须包含此头文件using namespace std;int main() {vector<int> nums = {1, 2, 3, 2, 4, 2, 5};int target = 2;// 统计 nums 中 2 出现的次数int cnt = count(nums.begin(), nums.end(), target);cout << "数字 " << target << " 出现了 " << cnt << " 次" << endl;// 输出:数字 2 出现了 3 次return 0;
}
示例 2:统计数组中特定元素的次数
#include <iostream>
#include <algorithm>using namespace std;int main() {int arr[] = {5, 3, 5, 7, 5, 9};int n = sizeof(arr) / sizeof(arr[0]);  // 数组长度int target = 5;// 统计数组中 5 出现的次数(用指针作为迭代器)int cnt = count(arr, arr + n, target);cout << "数字 " << target << " 出现了 " << cnt << " 次" << endl;// 输出:数字 5 出现了 3 次return 0;
}
示例 3:统计字符串中特定字符的次数
#include <iostream>
#include <string>
#include <algorithm>using namespace std;int main() {string s = "hello world";char target = 'l';// 统计字符串中 'l' 出现的次数int cnt = count(s.begin(), s.end(), target);cout << "字符 '" << target << "' 出现了 " << cnt << " 次" << endl;// 输出:字符 'l' 出现了 3 次return 0;
}

三、工作原理

count 函数的内部逻辑其实很简单,相当于一个「自动循环计数」的过程:

  1. first 迭代器开始,遍历到 last 迭代器(不包含 last 指向的位置)。
  2. 每遇到一个与 value 相等的元素,就将计数加 1。
  3. 遍历结束后,返回总计数。

可以理解为它替我们实现了这样的手动循环:

// 手动模拟 count 函数的逻辑
int manual_count(vector<int>& nums, int value) {int cnt = 0;for (int x : nums) {if (x == value) cnt++;}return cnt;
}

四、注意事项

  1. 必须包含头文件
    使用 count 函数前,必须包含 <algorithm> 头文件,否则会编译错误。

  2. 范围是左闭右开
    函数的统计范围是 [first, last),即包含 first 指向的元素,但不包含 last 指向的元素。例如:

    vector<int> nums = {1,2,3,4,5};
    // 只统计前3个元素(1,2,3)中 2 出现的次数
    int cnt = count(nums.begin(), nums.begin() + 3, 2);  // 结果为 1
    
  3. 元素必须支持 == 比较
    count 函数通过 == 运算符判断元素是否相等,因此容器中的元素类型必须支持 == 操作(如基本类型 intchar,或自定义类型重载了 == 运算符)。

  4. 时间复杂度
    count 函数需要遍历整个范围 [first, last),时间复杂度为 O(n)(n 是范围中元素的个数),与手动循环计数效率相同,但代码更简洁。

  5. 哈希表的count()
    unordered_map::count(key) 的返回值只有两种可能:0(键不存在)或 1(键存在)。
    这是因为 unordered_map不允许存在重复的键(每个键唯一对应一个值),所以「键的出现次数」要么是 0(不存在),要么是 1(存在)。

五、与 count_if 的区别

标准库中还有一个类似的函数 count_if,用于统计满足特定条件的元素个数(而非等于某个固定值)。例如:

// 统计 nums 中大于 3 的元素个数
vector<int> nums = {1,2,3,4,5,6};
int cnt = count_if(nums.begin(), nums.end(), [](int x) { return x > 3; });
// 结果为 3(4,5,6 满足条件)
  • count 适用于「等于某个值」的简单统计;
  • count_if 适用于「满足自定义条件」的复杂统计(需传入一个判断条件的函数或 lambda 表达式)。
http://www.dtcms.com/a/349453.html

相关文章:

  • linux 正则表达式学习
  • 虚拟化技术 ——KVM
  • Redis常规指令及跳表
  • 机器学习--朴素贝叶斯
  • 零基础-动手学深度学习-13.1. 图像增广
  • 使用烛线图展示二进制01离散量趋势图
  • 嵌入式GPIO外设深度技术解析:从基础原理到高级应用
  • 开源 C++ QT Widget 开发(六)通讯--TCP调试
  • 微软恶意软件删除工具:官方免费的系统安全防护利器
  • CentOS安装Jenkins全流程指南
  • 3-1.Python 函数 - 函数基础(函数概述、函数的定义与调用、函数文档)
  • 8.25 朴素贝叶斯
  • [AI] Firebase Studio :AI+云端 IDE
  • C++深度优先搜素
  • 说明哈夫曼树查询过程的例子
  • 基于MATLAB的遥感图像变化检测
  • 嵌入式系统学习Day22(进程)
  • 【React】案例:B站评论
  • C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
  • Coze用户账号设置修改用户头像-后端源码
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 容器学习day02
  • [React]Antd Cascader组件地区选择
  • SpringBoot整合Elasticsearch
  • SQL语法指南
  • Docker基本使用方法和常用命令
  • Spring文件上传核心技术解析
  • Java 编辑器与 IDE:开发者手中的利剑与盾牌
  • 彻底解决PyCharm中Matplotlib无法显示图形及中文乱码问题
  • Nginx + Certbot配置 HTTPS / SSL 证书