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

C++ std::find函数 容器元素查找

简介

std::find函数是C++标准库内非常实用的一个函数,主要用于在给定范围内查找某个元素,如果找到该元素,则返回指向该元素的迭代器;如果没有找到,则返回指向范围末尾的迭代器(即 end() )。

find函数原型

std::find在头文件algorithm

template< class InputIt, class T >  
InputIt find( InputIt first, InputIt last, const T& value );
  • find函数是一个模板函数
  • InputIt first 查询范围的开始迭代器(类似begin()
  • InputIt last 查询范围的结束迭代器(类似 end()
  • const T& value 要查询的值

返回值

  • 如果找到了值 value,则返回一个迭代器,指向找到的该值的第一个匹配项。
  • 如果没有找到,则返回 last 迭代器。

示例代码

#include <iostream>  
#include <vector>  
#include <algorithm> // 包含 std::find  int main() {  std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};  // 查找元素 5  auto it = std::find(vec.begin(), vec.end(), 5);  if (it != vec.end()) {  std::cout << "找到元素 5,位置:" << std::distance(vec.begin(), it) << std::endl;  } else {  std::cout << "未找到元素 5" << std::endl;  }  // 查找元素 10(不存在)  it = std::find(vec.begin(), vec.end(), 10);  if (it == vec.end()) {  std::cout << "未找到元素 10" << std::endl;  }  return 0;  
}

注意事项

  • std::find 对范围内的元素进行顺序查找,时间复杂度为 O(n),其中 n 是范围内的元素数量。
  • std::find 可以用于任何支持随机访问迭代器、双向迭代器或前向迭代器的容器。

find_if函数原型

std::find_iffind一样在头文件algorithm

template< class InputIt, class UnaryPredicate >  
InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );
  • InputIt first, InputIt last:这两个参数定义了要搜索的范围,其中 first 是指向范围开始的迭代器,last 是指向范围结束(但不包括该位置)的迭代器。
  • UnaryPredicate p:这是一个一元谓词函数,它接受范围中的一个元素作为参数,并返回一个布尔值。如果谓词对某个元素返回 true,则搜索停止,并返回指向该元素的迭代器。

返回值

  • 如果找到了满足条件的元素,则返回指向该元素的迭代器。
  • 如果没有找到满足条件的元素,则返回 last 迭代器。

代码示例

#include <iostream>  
#include <vector>  
#include <algorithm> // 包含 std::find_if  int main() {  std::vector<int> vec = {1, 5, 10, 15, 20};  // 使用 std::find_if 和 lambda 表达式查找第一个大于 10 的元素  auto it = std::find_if(vec.begin(), vec.end(), [](int i) {  return i > 10;  });  if (it != vec.end()) {  std::cout << "找到的元素:" << *it << std::endl;  } else {  std::cout << "未找到大于 10 的元素" << std::endl;  }  return 0;  
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PHP智慧教育新篇章优校管理系统小程序源码
  • 适用于QF的存档系统
  • python是什么语言写的
  • Go语言并发模式详解:深入理解管道与上下文的高级用法
  • Android-UI设计
  • 数据结构与算法 #时间复杂度 #空间复杂度
  • 可智能生成刺绣图案!武汉纺织大学可视计算与数字纺织团队发布首个多缝线刺绣生成对抗网络模型,被顶级期刊 TVCG 录用
  • 《重生之我在java世界做任务升级》--第二章
  • 机器学习及其应用领域【金融领域】
  • 算法导论——Data Structures and Dynamic Arrays 笔记
  • 进度调度切换
  • HTML+CSS学习笔记
  • Elasticsearch——介绍、安装与初步使用
  • 【UI自动化】前言
  • ELK-01-elasticsearch-8.15.1安装
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • CODING 缺陷管理功能正式开始公测
  • Git学习与使用心得(1)—— 初始化
  • Java-详解HashMap
  • Node项目之评分系统(二)- 数据库设计
  • python大佬养成计划----difflib模块
  • Redux系列x:源码分析
  • Spring Cloud Feign的两种使用姿势
  • VUE es6技巧写法(持续更新中~~~)
  • webpack4 一点通
  • 安卓应用性能调试和优化经验分享
  • 测试如何在敏捷团队中工作?
  • 从重复到重用
  • 给第三方使用接口的 URL 签名实现
  • 蓝海存储开关机注意事项总结
  • 前端性能优化——回流与重绘
  • 区块链技术特点之去中心化特性
  • 大数据全解:定义、价值及挑战
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​ArcGIS Pro 如何批量删除字段
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (3)nginx 配置(nginx.conf)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (LLM) 很笨
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十六)视图变换 正交投影 透视投影
  • (转) Face-Resources
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)编辑寄语:因为爱心,所以美丽
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)