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

embedded/2024/9/20 10:12:14/

简介

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;  
}

http://www.ppmy.cn/embedded/114129.html

相关文章

解锁定位服务:Flutter应用中的高德地图定位

前言 在现代移动应用开发中&#xff0c;定位服务已成为一项基本功能&#xff0c;它使得应用能够获取用户的地理位置信息&#xff0c;为用户提供更加个性化的服务。 Flutter 作为跨平台的移动应用开发框架&#xff0c;支持集成多种服务&#xff0c;包括定位服务。 本文将介绍如…

Golang | Leetcode Golang题解之第405题数字转换为十六进制数

题目&#xff1a; 题解&#xff1a; func toHex(num int) string {if num 0 {return "0"}sb : &strings.Builder{}for i : 7; i > 0; i-- {val : num >> (4 * i) & 0xfif val > 0 || sb.Len() > 0 {var digit byteif val < 10 {digit 0…

Bio-Linux-shell详解-1-从0开始

21世纪是数据的世纪&#xff0c;蓬勃发展的生物学积累了大量的数据&#xff0c;急需计算生物学、生物信息学及系统生物学等交叉学科大放异彩&#xff0c;而windows作为我们最熟悉的操作平台&#xff0c;并不能承担如此巨大的工作量&#xff0c;课题组的服务器因此承担了这个责任…

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…

【算法篇】栈与队列类(笔记)

目录 一、用栈实现队列 二、用队列实现栈 三、有效的括号 四、删除字符串中的所有相邻重复项 五、逆波兰表达式求值 六、滑动窗口最大值 七、前 K 个高频元素 一、用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/proble…

vue3常用的组件间通信

一 props props 可以实现父子组件通信&#xff0c;props数据是只读。 1. 基本用法 在父组件中&#xff0c;你可以这样传递 props&#xff1a; <template><ChildComponent message"Hello, Vue 3!" /> </template><script setup> import C…

C++STL之stack和queue容器适配器: 相关习题解析

1. 最小栈 . - 力扣&#xff08;LeetCode&#xff09; 思路: 一、整体架构 使用两个栈 st 和 min_st 分别实现不同的功能。 st 用于存放插入的数据&#xff0c;即主要的数据存储栈&#xff0c;模拟常规的数据存储结构。min_st 用于存放最小的元素&#xff0c;通过特定的插入…

力扣438 找到字符串中所有字母异位词 Java版本

文章目录 题目描述代码 题目描述 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s …