STL——查找算法

算法简介:

  • find ——//查找元素
  • find_if ——//按条件查找元素
  • adjacent_find ——//查找相邻重复元素
  • binary_search ——//二分查找法
  • count ——//统计元素个数
  • count_if ——//按条件统计元素个数

1.find

函数原型:

  • find(iterator beg, iterator end, value);——// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置;beg 开始迭代器;end 结束迭代器;value 查找的元素
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find——查找算法
//查找内置数据类型
void test01()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator it = find(v.begin(), v.end(), 5);if (it == v.end()){cout << "没有找到!" << endl;}else{cout << "找到了:" << *it << endl;}
}
//查找自定义数据类型
class Person
{
public:Person(string name, int age){this->m_name = name;this->m_age = age;}//重载 == 让底层find知道如何对比Person数据类型bool operator==(const Person&p){if (this->m_name == p.m_name && this->m_age == p.m_age){return true;}else{return false;}}string m_name;int m_age;
};
void test02()
{vector<Person>v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);//导入数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);Person pp("ccc", 30);vector<Person>::iterator it = find(v.begin(), v.end(), pp);if (it == v.end()){cout << "没有找到!" << endl;}else{cout << "找到了:name = " << (*it).m_name << " age = " << it->m_age << endl;}
}
int main()
{//test01();test02();system("pause");return 0;
}

2.find_if

函数原型:

  • find_if(iterator beg, iterator end, _Pred);——// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置;beg 开始迭代器;end 结束迭代器; _Pred 函数或者谓词(返回bool类型的仿函数)
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//find_if——查找算法
class GreatFive
{
public:bool operator ()(int val){if (val > 5){return true;}else{return false;}}
};
//查找内置数据类型
void test01()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator it = find_if(v.begin(), v.end(), GreatFive());if (it == v.end()){cout << "没有找到大于5的数:" << endl;}else{cout << "找到了:" << *it << endl;}
}
//查找自定义数据类型
class Person
{
public:Person(string name, int age){this->m_name = name;this->m_age = age;}string m_name;int m_age;
};
class Great20
{
public:bool operator()(Person p){return p.m_age > 20;}
};
void test02()
{vector<Person>v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);//插入数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//找年龄大于20岁的人vector<Person>::iterator it = find_if(v.begin(), v.end(), Great20());if (it == v.end()){cout << "没有找到!" << endl;}else{cout << "找到了:name = " << it->m_name << " age = " << it->m_age << endl;}
}
int main()
{//test01();test02();system("pause");return 0;
}

3.adjacent_find

函数原型:

  • adjacent_find(iterator beg, iterator end);——// 查找相邻重复元素,返回相邻元素的第一个位置的迭代器;beg 开始迭代器;end 结束迭代器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//adjacent_find——查找相邻重复元素
void test01()
{vector<int>v;v.push_back(1);v.push_back(5);v.push_back(3);v.push_back(9);v.push_back(6);v.push_back(6);v.push_back(8);v.push_back(3);vector<int>::iterator pos = adjacent_find(v.begin(), v.end());if (pos == v.end()){cout << "没有相邻重复元素!" << endl;}else{cout << "找到了相邻重复元素:" << *pos << endl;}
}
int main()
{test01();system("pause");return 0;
}

4.binary_search

函数原型:

  • bool binary_search(iterator beg, iterator end, value);——// 查找指定的元素,查到 返回true 否则false;注意: 在无序序列中不可用; beg 开始迭代器; end 结束迭代器;value 查找的元素
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//binary_search——查找容器中指定元素是否存在(有序序列)
void test01()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//v.push_back(2);    如果是无序序列,结果未知!//查找容器中是否有9元素//注意:容器必须是有序序列bool ret = binary_search(v.begin(), v.end(), 9);if (ret){cout << "找到了!" << endl;}else{cout << "没有找到!" << endl;}
}
int main()
{test01();system("pause");return 0;
}

注:二分查找法效率很高,但查找容器中元素必须为有序序列。

5.count

函数原型:

  • count(iterator beg, iterator end, value)——// 统计元素出现次数;beg 开始迭代器;end 结束迭代器; value 统计的元素
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//count——查找算法
//查找内置数据类型
void test01()
{vector<int>v;v.push_back(20);v.push_back(50);v.push_back(90);v.push_back(40);v.push_back(50);v.push_back(80);v.push_back(50);int num = count(v.begin(), v.end(), 50);cout << "容器中5的个数为:" << num << endl;
}
//查找自定义数据类型
class Person
{
public:Person(string name, int age){this->m_name = name;this->m_age = age;}bool operator ==(const Person &p){if (p.m_age == this->m_age){return true;}else{return false;}}string m_name;int m_age;
};
void test02()
{vector<Person>v;//创建数据Person p1("aaa", 25);Person p2("bbb", 45);Person p3("ccc", 25);Person p4("ddd", 60);Person p5("eee", 25);Person p6("fff", 16);Person p7("ggg", 25);//导入数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);v.push_back(p6);v.push_back(p7);Person c("compare", 25);int num = count(v.begin(), v.end(), c);cout << "与compare年龄相同的人个数:" << num << endl;
}
int main()
{//test01();test02();system("pause");return 0;
}

注:统计自定义数据类型时需要配合重载operator==

6.count_if

函数原型:

  • count_if(iterator beg, iterator end, _Pred);——// 按条件统计元素出现次数;beg 开始迭代器;end 结束迭代器; _Pred 谓词
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>
//count_if——条件查找
//查找内置数据类型
class Greater30
{
public:bool operator()(int val){return val > 30;}
};
void test01()
{vector<int>v;v.push_back(10);v.push_back(50);v.push_back(80);v.push_back(60);v.push_back(30);v.push_back(40);//查找大于30的数的个数int num = count_if(v.begin(), v.end(), Greater30());cout << "大于30的数的个数:" << num << endl;
}
//查找自定义数据类型
class Person
{
public:Person(string name, int age){this->m_name = name;this->m_age = age;}string m_name;int m_age;
};
class ageGreater18
{
public:bool operator()(Person& p){return p.m_age > 18;}
};
void test02()
{vector<Person>v;//创建数据Person p1("aaa", 15);Person p2("bbb", 45);Person p3("ddd", 18);Person p4("fff", 60);Person p5("jjj", 85);//导入数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);//查找年龄大于18的人的个数int num = count_if(v.begin(), v.end(), ageGreater18());cout << "年龄大于18的人数:" << num << endl;
}
int main()
{//test01();test02();system("pause");return 0;
}

 

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

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

相关文章

(学习打卡1)重学Java设计模式之设计模式介绍

前言&#xff1a;听说有本很牛的关于Java设计模式的书——重学Java设计模式&#xff0c;然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧&#xff0c;本文主要记录笔者的学习笔记和心得。 打卡&#xff01;打卡&#xff01; 设计模式介绍 一、设计模式是什么&#xff1f; …

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88682033 一&#xff0c;概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法&#xff0c;用于预测时间序列数据的趋势和未来值。 在使用这种方法之前&#xff0c;需要将时间序…

Linux:apache优化(4)—— 隐藏版本号

运行环境 yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre gcc make zlib-devel 源码包配置 ./configure --prefix/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enabl…

oracle-检查点队列

检查点队列也在buffer cache上&#xff0c;和LRU&#xff0c;CBC。。。一样&#xff0c;也在一个链上。 检查点队列链也链的是脏块&#xff0c;也就是脏块不仅链在LRUW上&#xff0c;也在这里。 在LRUW上是按照冷热排列。而检查点队列链是按照脏块的第一次脏的时间顺序排序。 R…

20231230 SQL基础50题打卡

20231230 SQL基础50题打卡 570. 至少有5名直接下属的经理 表: Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | department | varchar | | managerId | int | -----------…

2024年单片机毕业设计选题物联网计算机电气电子类

博主八年毕业设计辅导经验&#xff0c;安全 可靠。 题目一&#xff1a;基于单片机的PM2.5空气质量检测仪器 选 1.用到ADC0832模数转换芯片&#xff0c;数据更加精准。 2.使用夏普传感器的GP2Y1010AUOF粉尘传感器实时检测空气中的PM2.5值并通过1602显示出来&#xff0c;检测…

【Spark精讲】一文讲透SparkSQL聚合过程以及UDAF开发

SparkSQL聚合过程 这里的 Partial 方式表示聚合函数的模式&#xff0c;能够支持预先局部聚合&#xff0c;这方面的内容会在下一节详细介绍。 对应实例中的聚合语句&#xff0c;因为 count 函数支持 Partial 方式&#xff0c;因此调用的是 planAggregateWithoutDistinct 方法&a…

conda环境下nvrtc: error: invalid value for --gpu-architecture解决方法

1 问题描述 在运行视频处理的模型过程中&#xff0c;出现如下异常&#xff1a; nvrtc: error: invalid value for --gpu-architecture (-arch)nvrtc compilation failed: #define NAN __int_as_float(0x7fffffff) #define POS_INFINITY __int_as_float(0x7f800000) #define N…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码&#xff0c;以及用python画最简单的图案&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …

十二、K8S之污点和容忍

污点和容忍 一、概念 k8s 集群中可能管理着非常庞大的服务器&#xff0c;这些服务器可能是各种各样不同类型的&#xff0c;比如机房、地理位置、配置等&#xff0c;有些是计算型节点&#xff0c;有些是存储型节点&#xff0c;此时我们希望能更好的将 pod 调度到与之需求更匹配…

AI绘画工具Midjourney绘画提示词Prompt分享

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

Python-01-print、input、#

目录 1、print函数的使用 2、input函数的使用 3、python中的注释 1、print函数的使用 print&#xff1a;基本输出函数 print&#xff08;输出内容&#xff09; eg&#xff1a; a100 b50 print(90) print(a) print(a*b) print("北京欢迎你")#字符串要引号引起…

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

《微信小程序开发从入门到实战》学习六十六

6.5 界面API 6.5.2 导航栏菜单API 使用wx.getMenuButtonBoundingClientRect接口可以获取导航栏菜单按钮&#xff08;右上角“胶囊”按钮&#xff09;的布局位置信息。 坐标信息以屏幕左上角为原点。调用该接口不传入参数&#xff0c;返回值为Object类型&#xff0c;包含属性…

数据的复制

基本概念 数据的复制指的是通过网络链接的多台机器保留相同的副本 为什么要进行数据的复制 使得用户和数据在地理上比较接近&#xff0c;因为大数据要求我们将计算安排在数据存放的位置和我们基本的内存模型不是很一样 &#xff0c;比如磁盘调入内存之类的。即使系统的一部分…

将本地工作空间robot_ws上传到gitee仓库

git config --global user.name "geniusChinaHN" git config --global user.email "12705243geniuschinahnuser.noreply.gitee.com" cd ~/robot_ws #git init#创建原始仓库时候用 git add . git commit -m "上传文件内容描述" #git remote add r…

EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装

[TOC](EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装) EOS官网&#xff1a;https://eos.io/ 第一步 Ubuntu安装命令&#xff1a; 以下有两种安装方式&#xff0c;可以任选其一&#xff1a; 本文章已经上传绑定资源&#xff0c;也可以用命令安装。…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域&#xff0c;数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求&#xff0c;我们推出了一款基于Vue3和Flask编写的学生数据可视化…

【PyQt】(自定义类)QIcon派生,更易用的纯色Icon

嫌Qt自带的icon太丑&#xff0c;自己写了一个&#xff0c;主要用于纯色图标的自由改色。 当然&#xff0c;图标素材得网上找。 Qt原生图标与现代图标对比&#xff1a; 没有对比就没有伤害 Qt图标 网络素材图标 自定义类XJQ_Icon&#xff1a; from PyQt5.QtGui import QIc…

LeetCode---377周赛---Floyd算法+字典树

题目列表 2974. 最小数字游戏 2975. 移除栅栏得到的正方形田地的最大面积 2976. 转换字符串的最小成本 I 2977. 转换字符串的最小成本 II 一、最小数字游戏 这题看懂题意就好&#xff0c;可以结合示例模拟一下&#xff0c;你就会发现规律&#xff0c;本质就是将数组排序&a…