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

学校网站建设背景科技作品手工

学校网站建设背景,科技作品手工,主题网站的设计方案,网站助手 伪静态一、std::find 函数 功能&#xff1a;在指定范围内查找特定值&#xff0c;返回第一个匹配元素的迭代器&#xff1b;若未找到&#xff0c;返回 end() 迭代器。 原型&#xff1a; template <class InputIt, class T> InputIt find(InputIt first, InputIt last, const T&…
一、std::find 函数

功能:在指定范围内查找特定值,返回第一个匹配元素的迭代器;若未找到,返回 end() 迭代器。
原型

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

测试用例

#include <algorithm>
#include <vector>
#include <iostream>int main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 查找值为 30 的元素auto it = std::find(vec.begin(), vec.end(), 30);if (it != vec.end()) {std::cout << "Found: " << *it << std::endl; // 输出: Found: 30} else {std::cout << "Not found" << std::endl;}return 0;
}

二、std::find_if 函数

功能:在指定范围内查找满足谓词条件的元素,返回第一个匹配的迭代器;未找到则返回 end()
原型

template <class InputIt, class UnaryPredicate>
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);

测试用例

#include <algorithm>
#include <vector>
#include <iostream>int main() {std::vector<int> vec = {1, 3, 5, 7, 8, 9};// 查找第一个偶数(使用 Lambda 表达式作为谓词)auto it = std::find_if(vec.begin(), vec.end(), [](int n) {return n % 2 == 0;});if (it != vec.end()) {std::cout << "First even: " << *it << std::endl; // 输出: First even: 8} else {std::cout << "No even found" << std::endl;}return 0;
}

三、findfind_if 的核心差异

特性std::findstd::find_if
查找条件直接匹配固定值 (value)通过谓词(函数、Lambda 等)定义复杂条件
适用场景精确值查找(如整数、字符串)动态或复合条件(如范围、属性判断)
性能直接比较,无额外开销需调用谓词,可能增加开销(取决于逻辑)
灵活性低(仅限相等性检查)高(支持任意自定义条件)

四、关键差异总结

  1. 条件形式

    • find:查找与 value 严格相等的元素。
    • find_if:通过谓词自定义条件(如大于、复合逻辑等)。
  2. 代码示例对比

    // find: 直接查找值为 5 的元素
    auto it1 = std::find(vec.begin(), vec.end(), 5);// find_if: 查找大于 5 的元素
    auto it2 = std::find_if(vec.begin(), vec.end(), [](int n) { return n > 5; });
    
  3. 性能考虑

    • 两者均为线性搜索(O(n) 复杂度)。
    • find_if 的谓词若包含复杂逻辑(如动态计算),可能影响性能。

五、进阶用法

自定义对象查找

struct Person {std::string name;int age;
};std::vector<Person> people = {{"Alice", 25}, {"Bob", 30}};// 使用 find_if 查找年龄大于 28 的人
auto it = std::find_if(people.begin(), people.end(), [](const Person& p) {return p.age > 28;
});

六、总结

  • 优先 find:当查找条件为简单相等性检查时(如基本类型、字符串)。
  • 选择 find_if:需处理复杂条件(如类成员、动态计算)时,利用 Lambda 或函数对象提高灵活性。

七、完整样例代码与输出

测试代码

#include <algorithm>
#include <vector>
#include <iostream>void find_test(void)
{std::vector<int> vec = {10, 20, 30, 40, 50};// 查找值为 30 的元素auto it = std::find(vec.begin(), vec.end(), 30);if (it != vec.end()) {std::cout << "Found: " << *it << std::endl; // 输出: Found: 30} else {std::cout << "Not found" << std::endl;}
}void find_if_test(void)
{std::vector<int> vec = {1, 3, 5, 7, 8, 9};// 查找第一个偶数(使用 Lambda 表达式作为谓词)auto it = std::find_if(vec.begin(), vec.end(), [](int n) {return n % 2 == 0;});if (it != vec.end()) {std::cout << "First even: " << *it << std::endl; // 输出: First even: 8} else {std::cout << "No even found" << std::endl;}
}void find_if_test2(void)
{std::vector<int> vec = {1, 3, 5, 7, 8, 9};// 查找第一个偶数(使用 Lambda 表达式作为谓词)auto it = std::find_if(vec.begin(), vec.end(), [](int n) { return n > 5;});if (it != vec.end()) {std::cout << "First > 5: " << *it << std::endl; // 输出: First even: 8} else {std::cout << "No even found" << std::endl;}
}struct Person {std::string name;int age;
};void find_if_test3(void)
{std::vector<Person> people = {{"Alice", 25}, {"Bob", 30}};// 查找第一个偶数(使用 Lambda 表达式作为谓词)auto it = std::find_if(people.begin(), people.end(),  [](const Person& p) { return p.age > 28;});if (it != people.end()) {std::cout << "people age > 28: " << it->name << std::endl; // 输出: First even: 8} else {std::cout << "No even found" << std::endl;}
}
int main() {std::cout << "====================="<< std::endl;std::cout << "find_test start"<< std::endl;find_test();std::cout << "====================="<< std::endl;std::cout << "find_if_test start"<< std::endl;find_if_test();std::cout << "====================="<< std::endl;std::cout << "find_if_test2 start"<< std::endl;find_if_test2();std::cout << "====================="<< std::endl;std::cout << "find_if_test3 start"<< std::endl;find_if_test3();return 0;
}

结果输出

=====================
find_test start
Found: 30
=====================
find_if_test start
First even: 8
=====================
find_if_test2 start
First > 5: 7
=====================
find_if_test3 start
people age > 28: Bob
http://www.dtcms.com/a/536817.html

相关文章:

  • SmartPLS下载安装教程(附安装包)SmartPLS 4.1保姆级图文教程
  • ECR扫描管理功能完整实现:提升云原生镜像安全管控效率
  • PySide6 Win10记事本从零到一——第二章 第一个窗口程序
  • 商务英语资源合集
  • Shell 变量
  • 基于vue的在线学习系统
  • 【题解】洛谷 P4291 [HAOI2008] 排名系统 [字符串 + 平衡树]
  • html5做网站好吗漳州做网站制作
  • 做网站从哪里找货源江门制作公司网站
  • 鸿蒙Flutter三方库适配指南-02.Flutter相关知识基础
  • 随机SVD:大规模矩阵分解的高效算法
  • mysql 数据库做异机定时器自动全库备份
  • ctf常用古典密码
  • 手机网站程序如何自己设计图片
  • 怎么看一个网站什么程序做的国外网站建设素材库
  • MongoDB的$sample是啥?
  • __金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
  • 缓存相关,redis
  • 零基础如何准备蓝桥杯
  • 佛山 网站设计公司中山高端网站建设
  • 2.2.1.10 大数据方法论与实践指南-Kafka 使用规范
  • 培训班在哪个网站找网站建设注意事情
  • 企业的网站建设公司南阳做网站 汉狮公司
  • 数据驱动下的金融AI实践:技术落地路径、方法论沉淀与场景价值挖掘
  • 百日挑战-单词篇(第五天)
  • 做网站的开发软件seo优化的优点
  • 1空间做2个网站2017网站设计趋势
  • <项目代码>yolo螺丝螺母识别<目标检测>
  • 企业级SQL审核工具PawSQL介绍(2)- 审核规则体系
  • FastGestures v2.2.51 鼠标、触控板、屏手势软件