0

0

c++怎么使用std::find和std::find_if算法_c++查找算法find用法详解

穿越時空

穿越時空

发布时间:2025-10-25 09:33:02

|

246人浏览过

|

来源于php中文网

原创

std::find用于查找等于指定值的元素,返回匹配项迭代器或末尾;std::find_if通过谓词查找首个满足条件的元素,适用所有提供迭代器的容器,支持自定义类型与lambda表达式,时间复杂度O(n),适合无序数据搜索。

c++怎么使用std::find和std::find_if算法_c++查找算法find用法详解

std::findstd::find_if 是 C++ 标准库中定义在 头文件中的两个常用查找算法,用于在指定范围内搜索满足条件的元素。它们不会修改容器内容,返回的是迭代器,表示第一个匹配位置或末尾迭代器(未找到时)。

std::find:查找特定值

std::find 用于在区间 [first, last) 中查找等于给定值的第一个元素。

函数原型:

template 
InputIt find(InputIt first, InputIt last, const T& value);

参数说明:
- first:起始迭代器
- last:结束迭代器(不包含)
- value:要查找的值

返回值: 找到则返回指向第一个匹配元素的迭代器;否则返回 last

示例代码:

立即学习C++免费学习笔记(深入)”;

#include 
#include
#include

int main() {
std::vector vec = {10, 20, 30, 40, 50};

auto it = std::find(vec.begin(), vec.end(), 30);

if (it != vec.end()) {
std::cout << "找到元素: " << *it << std::endl;
} else {
std::cout << "未找到元素" << std::endl;
}

return 0;
}

输出:
找到元素: 30

std::find_if:查找满足条件的元素

std::find_if 用于查找第一个满足指定条件的元素,条件通过可调用对象(如 lambda、函数指针或函数对象)传入。

MotionGo
MotionGo

AI智能对话式PPT创作,输入内容一键即可完成

下载
函数原型:

template 
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);

参数说明:
- first, last:搜索范围
- p:一元谓词,接受一个参数并返回布尔值

返回值: 第一个使谓词返回 true 的元素迭代器,否则返回 last

示例代码:使用 lambda 查找第一个偶数

#include 
#include
#include

int main() {
std::vector vec = {1, 3, 5, 8, 9, 10};

auto it = std::find_if(vec.begin(), vec.end(),
[](int x) { return x % 2 == 0; });

if (it != vec.end()) {
std::cout << "第一个偶数是: " << *it << std::endl;
} else {
std::cout << "未找到偶数" << std::endl;
}

return 0;
}

输出:
第一个偶数是: 8

常见使用场景与注意事项

支持的容器类型:
- 所有提供迭代器的 STL 容器(如 vector、list、array、deque 等)
- 原生数组也可使用(配合指针)

自定义类型查找:
若要在自定义结构体中查找,需确保重载了 == 操作符(对 find),或正确编写判断逻辑(对 find_if)。

示例:在结构体中查找特定姓名

#include 
#include
#include
#include

struct Person {
std::string name;
int age;
};

int main() {
std::vector people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};

auto it = std::find_if(people.begin(), people.end(),
[](const Person& p) { return p.name == "Bob"; });

if (it != people.end()) {
std::cout << "找到: " << it->name << ", 年龄: " << it->age << std::endl;
}

return 0;
}

性能提示:
- 两者时间复杂度为 O(n),适用于无序数据
- 对有序数据,考虑使用 binary_searchlower_bound 等更高效算法

基本上就这些。掌握 std::findstd::find_if 能显著提升代码可读性和安全性,避免手写循环出错。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

522

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

204

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

190

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

45

2026.01.05

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

464

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

12

2025.12.06

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

12

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.7万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号