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

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

http://www.kler.cn/news/316883.html

相关文章:

  • 机器学习-梯度下降实验一
  • 探索味蕾新境界,品味嘴尚绝卤味的健康之旅
  • 摩尔-彭罗斯伪逆(pinv)
  • spring 的启动过程
  • Kotlin 智能类型转换与 when 表达式(八)
  • 828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Redis集群
  • 实战19-详情页UI4等分
  • 浅谈C#之SynchronizationContext
  • Fyne ( go跨平台GUI )中文文档- 架构 (八)完结
  • Openpyxl 插入数据添加数据
  • leetcode 437.路径总和III
  • Gitlab runner的简单使用(一)
  • 【Redis】之Geo
  • 红黑树:强大的数据结构之插入详解,附图
  • yolov8多任务模型-目标检测+车道线检测+可行驶区域检测-yolo多检测头代码+教程
  • Spring IOC容器Bean对象管理-注解方式
  • 每日一题——第九十四题
  • pywinauto:Windows桌面应用自动化测试(十)
  • 成都睿明智科技有限公司怎么样?
  • 【深度】为GPT-5而生的「草莓」模型!从快思考—慢思考到Self-play RL的强化学习框架
  • Shader 中的光源
  • 民主测评系统可以解决哪些问题?
  • Typescript进阶:解锁Infer类型的使用
  • C++笔记---set和map
  • NLP--自然语言处理学习-day1
  • 《微信小程序实战(3) · 推广海报制作》
  • 文件系统(软硬链接 动静态库 动态库加载的过程)
  • C++学习笔记(32)
  • 在C#中使用NPOI将表格中的数据导入excel中
  • 工业交换机如何保证数据的访问安全