C++系列-STL中find相关的算法

STL中find相关的算法

  • 💢find相关的算法
    • 💢💢find,find_if举例
    • 💢💢find_first_of举例
    • 💢💢find_end举例
    • 💢💢adjacent_find举例


秋词二首
刘禹锡刘禹锡〔唐代〕

自古逢秋悲寂寥,我言秋日胜春朝。
晴空一鹤排云上,便引诗情到碧霄


💢find相关的算法

Column 1Column 2
find(beg, end, val)利用==运算符,对[begin, end)的元素与val进行比较,当匹配时结束搜索,返回该元素的迭代器
find_if(beg, end, pred)使用谓词代替find中的==操作符,执行find
find_first_of(beg1, end1, beg2, end2)在[beg1, end1)范围内查找[beg2, end2)中任意一个元素的第一次出现,返回该元素[beg1, end1)中的迭代器
find_first_of(beg1, end1, beg2, end2, pred)使用谓词代替==操作符,执行find_first_of
find_end(beg1, end1, beg2, end2)在[beg1, end1)范围内查找[beg2, end2)这一串元素的最后一次出现,返回序列匹配到的在第一个序列中的迭代器
find_end(beg1, end1, beg2, end2, pred)使用谓词代替==执行执行find_end, 返回值同find_end
adjacent_find(beg, end)在[beg, end)范围内查找相邻相同的元素,找到则返回第一个元素的迭代器,否则返回end迭代器
adjacent_find(beg, end, pred)使用谓词代替==,找到则返回第一个元素的迭代器,否则返回end迭代器

💢💢find,find_if举例

👉 👉 👉find和find_if只从头找第一个,找到第一个满足条件的就返回。
find(vec1.begin(), vec1.end(), 3),从vec1中找==3的元素,返回其对应的迭代器。
find_if(vec3.begin(), vec3.end(), [](int val) -> bool {return val > 10;}),从vec3中满足后面的谓词的元素,即元素值大于10,返回器对应的迭代器。

code:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;template<class T>
class MyPrint
{
public:void operator()(T& val){cout << val << " ";}
};void test01()
{// find举例vector<int> vec1{1, 2, 3, 4, 5, 3, 3};// find(beg, end, val) find等于3vector<int>::iterator it = find(vec1.begin(), vec1.end(), 3);if (it != vec1.end()){cout << "*it:" << *it << endl;cout << "[it:vec1.end())中的元素: " << endl;for_each(it, vec1.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void test02()
{// find_if举例vector<int> vec3{1, 3, 10, 11, 12, 3};// find_if(beg, end, pred),一元谓词判断是否大于10vector<int>::iterator it = find_if(vec3.begin(), vec3.end(), [](int val) -> bool {return val > 10;});if (it != vec3.end()){cout << "*it:" << *it << endl;cout << "[it:vec3.end())中的元素: " << endl;for_each(it, vec3.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void main()
{test01();test02();system("pause");
}result:
*it:3
[it:vec1.end())中的元素:
3 4 5 3 3*it:11
[it:vec3.end())中的元素:
11 12 3

💢💢find_first_of举例

👉 👉 👉find_first_of只从头找第一个,可能第二个序列中有多个元素在第一个序列中都能找到,但是以它们在第一个序列中最靠前的一个为最终找到的结果。
示例中第二个序列vec12{8, 5, 7, 10, 12, 3},10能在第一个序列vec11{1, 3, 10, 11, 12, 3}中找到,3也可以,但是3更靠前,所以返回第一个序列中3对应的迭代器。

code:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;template<class T>
class MyPrint
{
public:void operator()(T& val){cout << val << " ";}
};void test03()
{// find_first_of举例vector<int> vec11{1, 3, 10, 11, 12, 3};vector<int> vec12{8, 5, 7, 10, 12, 3};vector<int>::iterator it = find_first_of(vec11.begin(), vec11.end(), vec12.begin(), vec12.end());if (it != vec11.end()){cout << "*it:" << *it << endl;cout << "[it:vec12.end())中的元素: " << endl;for_each(it, vec11.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void test04()
{// find_first_of举例, pred的目标,第二组里的任意一个元素大于第一组的任意一个元素(都从头开始找),如果满足就算找到了,返回第一组元素对应的迭代器vector<int> vec11{18, 3, 10, 11, 12, 3};vector<int> vec12{0, 1};vector<int>::iterator it = find_first_of(vec11.begin(), vec11.end(), vec12.begin(), vec12.end(), [](int val1, int val2) ->bool {return val2 > val1;});if (it != vec11.end()){cout << "找到了,*it:" << *it << endl << endl;}else{cout << "找不到" << endl << endl;}
}void main()
{test03();test04();system("pause");
}result:
*it:3
[it:vec12.end())中的元素:
3 10 11 12 3找不到

💢💢find_end举例

code:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;template<class T>
class MyPrint
{
public:void operator()(T& val){cout << val << " ";}
};void test01()
{// find_end举例,以第二个容器为基准,从第一个容器中找是否有连续的元素和第二个容器的元素完全相同,// 也就是说看第二个容器是否是第一个的子序列,并找出最后一次匹配的迭代器(此迭代器为第一个序列的迭代器)vector<int> vec11{1, 3, 10, 11, 12, 3, 10, 5};vector<int> vec12{3, 10};vector<int>::iterator it = find_end(vec11.begin(), vec11.end(), vec12.begin(), vec12.end());if (it != vec11.end()){cout << "*it:" << *it << endl;cout << "[it:vec12.end())中的元素: " << endl;for_each(it, vec11.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void test02()
{// find_end举例,以第二个容器为基准,从第一个容器中是否有连续的元素均满足小于第二个容器中的元素,// 找到最后一组,并把对应的第一个容器对应的迭代器返回。vector<int> vec11{1, 3, 10, 11, 12, 3, 10, 5, 15};vector<int> vec12{3, 10};vector<int>::iterator it = find_end(vec11.begin(), vec11.end(), vec12.begin(), vec12.end(), [](int val1, int val2) -> bool {return val1>=val2;});if (it != vec11.end()){cout << "*it:" << *it << endl;cout << "[it:vec12.end())中的元素: " << endl;for_each(it, vec11.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void main()
{test01();test02();system("pause");
}result:
*it:3
[it:vec12.end())中的元素:
3 10 5*it:5
[it:vec12.end())中的元素:
5 15

💢💢adjacent_find举例

code:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;template<class T>
class MyPrint
{
public:void operator()(T& val){cout << val << " ";}
};void test01()
{// adjacent_find举例,查找是否有相邻的元素相等,返回相等的第一个元素的迭代器vector<int> vec1{1, 3, 10, 10, 12, 10, 10, 5};vector<int>::iterator it = adjacent_find(vec1.begin(), vec1.end());if (it != vec1.end()){cout << "*it:" << *it << endl;cout << "[it到vec1.end())中的元素: " << endl;for_each(it, vec1.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void test02()
{// adjacent_find举例,查找是否有相邻的元素中的第一个整除第二个,返回满足条件的第一个元素的迭代器vector<int> vec1{1, 3, 10, 4, 12, 6, 10, 5};vector<int>::iterator it = adjacent_find(vec1.begin(), vec1.end(), [](int val1, int val2) -> bool {return val1 % val2 == 0;});if (it != vec1.end()){cout << "*it:" << *it << endl;cout << "[it到vec1.end())中的元素: " << endl;for_each(it, vec1.end(), MyPrint<int>());cout << endl << endl;}else{cout << "找不到" << endl << endl;}
}void main()
{test01();test02();system("pause");
}result:
*it:10
[it到vec1.end())中的元素:
10 10 12 10 10 5*it:12
[it到vec1.end())中的元素:
12 6 10 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python对股票市场进行数据挖掘的书籍资料有哪些

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

golang学习笔记19——golang做服务发现与注册的深度剖析

推荐学习文档 golang应用级os框架&#xff0c;欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

[linux 驱动]内核定时器详解与实战

目录 1 描述 2 结构体 2.1 timer_list 3 相关函数 3.1 DEFINE_TIMER 3.2 add_timer 3.3 del_timer 3.4 msecs_to_jiffies 3.5 usecs_to_jiffies 5 示例 4 延迟工作队列delayed_work 4.1 结构体 4.1.1 delayed_work 4.2 相关函数 4.2.1 DECLARE_DELAYED_WORK 4.2…

Grafana面板-linux主机详情(使用标签过滤主机监控)

1. 采集器添加labels标签区分业务项目 targets添加labels &#xff08;模板中使用的project标签&#xff09; … targets: [‘xxxx:9100’] labels: project: app2targets: [‘xxxx:9100’] labels: project: app1 … 2. grafana面板套用 21902 模板 演示

Python 错误 ValueError 解析,实际错误实例详解 (一)

文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…

微信小程序原生支持TS、LESS、SASS能力探究

文章目录 原生支持开始使用旧项目新建项目TS声明文件更新 功能说明less 使用全局变量sass 使用全局变量 可以参考原文 在之前开发小程序中&#xff0c;无法使用 less/sass 等 css 预编译语言&#xff0c;也无法使用 TS 进行开发&#xff0c;但在最新的编辑器版本中&#xff0c…

Vue3:el-table实现日期的格式化

后端如果返回的是时间戳&#xff0c;需要我们进行日期格式化 例如&#xff1a;2024-09-11T14:19:14 定义一个日期解析的工具组件 export function formatDateAsYYYYMMDDHHMMSS(dateStr: any) {const date new Date(dateStr);const year date.getFullYear();const month S…

Android 12 SystemUI下拉状态栏禁止QuickQSPanel展开

1.概述 遇到需求&#xff0c;QuickQSPanel首次下拉后展示快捷功能模块以后就是显示QuickQSPanel&#xff0c;而不展开QSPanel&#xff0c;接下来要从下滑手势下拉出状态栏分析功能实现。也就是直接是展开状态。 2、涉及核心类 frameworks\base\packages\SystemUI\src\com\and…

高级实时通信:基于 Python 的 WebSocket 实现与异步推送解决方案

高级实时通信&#xff1a;基于 Python 的 WebSocket 实现与异步推送解决方案 目录 &#x1f7e2; WebSocket 协议概述&#x1f535; 在 FastAPI 中实现 WebSocket&#x1f7e3; Django Channels 实现异步实时通信&#x1f534; 使用 Redis 实现实时推送 &#x1f7e2; 1. WebS…

关于 Camera Tuning 岗位的一些认识和看法

前言&#xff1a; 之前也写过几篇关于Camera Tuning岗位的相关介绍&#xff1a; IQ Tuning 学习路线 关于入职 ISP Tuning 岗位的几个问题及解答 随着工作时间越长&#xff0c;对这个岗位的认识较之前也有了一些更深刻的理解&#xff0c;这里整理总结一下。 一方面是当做现阶…

PHP一键约课高效健身智能健身管理系统小程序源码

一键约课&#xff0c;高效健身 —— 智能健身管理系统让健康触手可及 &#x1f3cb;️‍♀️ 告别繁琐&#xff0c;一键开启健身之旅 你还在为每次去健身房前的繁琐预约流程而烦恼吗&#xff1f;现在有了“一键约课高效健身智能健身管理系统”&#xff0c;所有问题都迎刃而解…

智能体-AI-Agent-简介

文章目录 一&#xff0c;什么是AI Agent二&#xff0c;扣子个人空间团队空间探索区 一&#xff0c;什么是AI Agent AI智能体并没有什么特别&#xff0c;本质上就是一个帮助你解决工作和学习中的一个工具。 很多自媒体把智能体描述的天花乱坠&#xff0c;那不过是他们畅想的智…

Spring Security认证与授权

1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员&#xff0c;因此它伴随着整个Spring生态系统不断修正、升级&#xff0c;在spring boot项目中加入springsecurity更是…

Vue的学习(三)

目录 一、for循环中key的作用 1‌.提高性能‌&#xff1a; ‌2.优化用户体验‌&#xff1a; ‌3.辅助Vue进行列表渲染‌&#xff1a; 4‌.方便可复用组件的使用‌&#xff1a; 二、methods及computed及wacth的区别 三、过滤器 1.Vue 2 过滤器简介 定义过滤器 使用过滤…

用 Swift 写 Android App ?来了解下 Skip 原生级跨平台框架

最近在找资料的时候&#xff0c;机缘巧合发现了一个有趣的商业跨平台框架 Skip &#xff0c;刚好看到了它发布 1.0 正式版&#xff0c;主要作用是将 Swift 开发引入到 Android 领域&#xff0c;这样 App 就可以共享 Swift 的业务逻辑&#xff0c;在 SwiftUI 中完成 Android App…

C#基础(8)函数

前言 我们先前已经具备了一些自己写小程序的能力&#xff0c;但是依旧还是逃不过大量的代码&#xff0c;那么今天&#xff0c;我们就将学习一个减少我们重复工作量的东西&#xff1a;函数。 在数学中我们知道&#xff0c;函数就是一个固定的公式&#xff0c;会画固定的图。 …

Python | Leetcode Python题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution:def longestSubstring(self, s1: str, k: int) -> int:if k 1: return len(s1)n len(s1)res 0for c in range(1, len(set(s1)) 1):# 滑窗中字母种类个数恰好为 cfreq Counter()l cnt tcnt 0 for r, ch in enu…

代码随想录训练营Day3 | 链表理论基础 | 203.移除链表元素 | 707.设计链表 | 206.反转链表

今天任务&#xff1a;学习链表理论基础 链表的类型 链表的存储方式 链表的定义…

开发一款通过蓝牙连接控制水电表的微信小程序

增强软硬件交互 为了更好的解决师生生活中的实际问题&#xff0c;开发蓝牙小程序加强了和校区硬件的交互。 比如通过蓝牙连接控制水电表&#xff0c;减少实体卡片的使用。添加人脸活体检测功能&#xff0c;提高本人认证效率&#xff0c;减少师生等待时间。 蓝牙水电控展示 蓝…

计算机科学基础 -- 超流水线

超流水线的概念 超流水线是一种进一步提高处理器性能的技术&#xff0c;它在传统流水线的基础上&#xff0c;将多个流水线组合在一起&#xff0c;能够在同一个时钟周期内同时执行多条指令。这种设计允许处理器的多个功能单元并行处理不同的指令&#xff0c;从而提高指令级并行…