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

news/2024/9/24 3:03:36/

简介

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/news/1529615.html

相关文章

react hooks--useLayoutEffect

概述 ◼ useLayoutEffect看起来和useEffect非常的相似&#xff0c;事实上他们也只有一点区别而已&#xff1a;  useEffect会在渲染的内容更新到DOM上后执行&#xff0c;不会阻塞DOM的更新&#xff1b;  useLayoutEffect会在渲染的内容更新到DOM上之前执行&#xff0c;会…

数据结构与算法-Trie树添加与搜索

trie树的使用场景 我们若需要制作一个通讯录的软件&#xff0c;使用常规树结构查询的复杂度为O(logn),但trie树的复杂度确与数据多少无关&#xff0c;与单词长度有关&#xff0c;这就大大缩减的查询的时间复杂度。 trie树的基本实现 基础结构 package com.study.trieDemo;i…

某恩加密数据爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9pbmRleC5odG1s 一、抓包分析 响应数据加密 二、逆向分析 下断点&#xff0c;刷新页面 一直往下跟栈&#xff0c;发现是在这进行的加密 内部实现逻辑 本地数据获取 本文章仅提供技术分享交流学习&#xff0c;不可对目标服务器造…

【洛谷】AT_abc371_e [ABC371E] I Hate Sigma Problems 的题解

【洛谷】AT_abc371_e [ABC371E] I Hate Sigma Problems 的题解 洛谷传送门 AT传送门 题解 I Hate Sigma Problems!!! 意思很简单就是求序列中每一个子区间内含有不同数字的个数之和。 暴力的话时间复杂度是 O ( n 2 ) O(n ^ 2) O(n2)&#xff0c;是肯定不行的&#xff0…

DSP学习00-F28379D学习准备(了解一个工程的构成)

叠甲 我也算初学F28379D&#xff0c;不对之处请大家斧正。不同型号的DSP在外设配置的函数上有一些区别&#xff0c;但是掌握一种对其他型号的来说则难度不大。对于我们而言学习DSP最终还是要用于算法验证&#xff0c;而DSP资源的最大化利用、代码效率提升等则是后话。 软件准…

macOS使用brew安装并配置python环境

1.确认已安装brew环境,如没有安装,参考: macOS系统Homebrew工具安装及使用-CSDN博客 2.安装python python安装成功 3.添加pip路径到/etc/paths 4.查看python与pip默认安装版本

Django 创建好的模块怎么在后台显示

1、配置模型及其需要显示的数据 刚才创建好的tests的增删改查&#xff0c;在后台是不显示的&#xff0c;所以需要进行配置,在刚才创建好的模块里找到admin.py文件&#xff0c;在里面进行如下配置 from django.contrib import adminfrom . import models from .models import …

新能源汽车数据大全(产销数据\充电桩\专利等)

新能源汽车数据大全&#xff08;产销数据\充电桩\专利等&#xff09; 来源&#xff1a;全国各省市统计年鉴、统计公报、国家能源署、中国汽车行业协会&#xff0c;各类汽车统计年鉴、中国电动汽车充电基础设施促进联盟等 1、汽车分品牌产销(95家车企&#xff0c;768个车型&am…