【C++】STL-常用算法-常用查找算法

news2024/9/25 19:19:23

0.前言

在这里插入图片描述

1.find

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

// 常用查找算法 find
#include<vector>
#include<algorithm>

//查找 内置数据类型
void test01()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}

	//查找 容器中 是否有 5 这个元素
	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) //加const 防止修改数据
	{
		if (p.m_Name == this->m_Name && p.m_Age == this->m_Age)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	string m_Name;
	int m_Age;
};

void test02()
{
	//创建数据
	Person p1("a", 10);
	Person p2("b", 20);
	Person p3("c", 30);

	//放入容器中
	vector<Person>v;
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);

	Person p5("b", 20);

	vector<Person>::iterator it = find(v.begin(), v.end(), p5);

	if (it == v.end())
	{
		cout << "未找到" << endl;
	}
	else
	{
		cout << "找到: 姓名: " << it->m_Name << "  age:" << (*it).m_Age << endl;
	}
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

2.find_if

在这里插入图片描述

#include <iostream>
using namespace std;

// 常用查找算法 find_if
#include<vector>


//1.查找内置数据类型

class Greater5
{
public:
	bool operator()(int val)
	{
		return val > 5;
	}
};

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(), Greater5());

	if (it == v.end())
	{
		cout << "no find" << endl;
	}
	else
	{
		cout << "find element: " << (*it) << endl;
	}
}

//2、查找自定义数据类型

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

//方式一 利用仿函数
//class greater_Age20
//{
//public:
//	bool operator()(const Person& p)
//	{
//		return p.m_Age > 20;
//	}
//};

//方式二 利用普通函数
bool greater_Age20(const Person& p)
{
	return p.m_Age > 20;
}


void test02()
{
	//创建对象
	Person p1("a", 10);
	Person p2("b", 20);
	Person p3("c", 30);
	
	vector<Person>v;
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);

	//查找年龄大于20的人
	vector<Person>::iterator it = find_if(v.begin(), v.end(), greater_Age20);

	if (it == v.end())
	{
		cout << "no find" << endl;
	}
	else
	{
		cout << "find the element: name:" << it->m_Name << " age:" << it->m_Age << endl;
	}
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

3.adjacent_find

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

// 常用查找算法 adjacent_find
#include<vector>
#include<algorithm>

void test01()
{
	//创建对象
	vector<int>v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(1);
	v.push_back(3);
	v.push_back(4);
	v.push_back(3);
	v.push_back(3);

	vector<int>::iterator pos = adjacent_find(v.begin(), v.end());

	if (pos == v.end())
	{
		cout << "no find adjacent duplcate elements " << endl;
	}
	else
	{
		cout << "find adjacent duplcate elements: " << *pos << endl;
	}
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	//test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

4.binary_search

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

// 常用查找算法 binary_search 二分查找
#include<vector>
#include<algorithm>

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 << "find point element" << endl;
	}
	else
	{
		cout << "no find" << endl;
	}
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	//test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

5.count

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

// 常用查找算法 count
#include<vector>
#include<algorithm>

//1.统计内置数据类型
void test01()
{
	vector<int>v;
	v.push_back(1);
	v.push_back(4);
	v.push_back(1);
	v.push_back(3);

	int num = count(v.begin(), v.end(), 1);
	
	cout << "the nmber of point element: " << num << endl;
}

//2.统计自定义数据类型
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()
{
	//创建对象
	Person p1("刘备", 35);
	Person p2("薇恩", 24);
	Person p3("皮城", 35);
	Person p4("光辉", 40);

	vector<Person>v;
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);

	Person p5("卡米尔", 35);

	int num = count(v.begin(), v.end(), p5);
	 
	cout << "跟卡米尔同岁的人有多少个: " << num << endl;
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	//test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

6.count_if

在这里插入图片描述

#include <iostream>
using namespace std;


// 常用查找算法 count_if
#include<vector>
#include<algorithm>

//1、统计内置数据类型

//利用仿函数
class Greater3
{
public:
	bool operator()(int val)
	{
		return val > 3;
	}
};

void test01()
{
	vector<int>v;
	v.push_back(1);
	v.push_back(6);
	v.push_back(3);
	v.push_back(2);
	v.push_back(4);
	v.push_back(3);

	int num = count_if(v.begin(), v.end(), Greater3());

	cout << "the number of element greater than 3 :  " << num << endl;
}

//2、统计自定义数据类型

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

//利用普通函数
bool age_Greater35(const Person& p)
{
	if (p.m_Age > 35)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void test02()
{

	//创建对象
	Person p1("刘备", 35);
	Person p2("薇恩", 24);
	Person p3("皮城", 35);
	Person p4("光辉", 40);
	
	vector<Person>v;
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);

	//统计岁数大于35的人物的个数
	int num = count_if(v.begin(), v.end(), age_Greater35);

	cout << "the number of character whose age greater than 35 :" << num << endl;
}

int main()
{
	test01();
	cout << "------------------------" << endl;
	test02();
	//cout << "------------------------" << endl << endl;
	//test03();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

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

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

相关文章

C--小Why的商品归位-- 牛客小白月赛77

输入 3 3 1 1 2 1 3 2 3 输出 2 解析&#xff1a; 先不考虑购物车的容量&#xff0c;即购物车容量为无限大。这样我们可以通过每种货物上车、下车的时间计算出每一个时间点内&#xff0c;购物车中货物的数量。 统计出所有时间点内&#xff0c;货物数量的最大值max。这个最大…

CRM软件系统的三大优势

随着市场环境的不断发展和变化&#xff0c;企业的管理模式也在不断地调整。CRM管理系统是企业数字化转型的重要一环&#xff0c;可以帮助企业更好地管理客户关系和市场销售&#xff0c;提高企业运营效率和经济效益&#xff0c;CRM管理系统有哪些优势呢&#xff1f;今天小编就来…

Vue2+Vue3基础入门到实战项目(七)——智慧商城项目

Vue 核心技术与实战 智慧商城 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-adc2-444c-ad11-0e60f5693f66/doc-2221080 演示地址&#xff1a;http://cba.itlike.com/public/mweb/#/ 01. 项目功能演示 1.明确功能模块 启动准备好的代码&#xff0c;演示…

深入了解苹果证书及其分类,提升iOS应用开发效率

目录 1. 企业证书 2. 开发者证书 开发证书&#xff1a; 发布证书&#xff1a; 3. 推送证书 4. 分发证书 5. MDM证书 摘要&#xff1a;本文将详细介绍苹果证书的作用及分类&#xff0c;包括企业证书、开发者证书、推送证书、分发证书和MDM证书&#xff0c;帮助开发者了解…

Win11如何显示文件后缀名

有小伙伴发现在更新了Win11之后&#xff0c;文件的后缀名就被隐藏起来了&#xff0c;那么Win11怎么显示文件的后缀名呢&#xff0c;下面小编就给大家带来Win11显示文件后缀名的方法&#xff0c;大家感兴趣的话可以来看一看。 Win11显示文件后缀名的方法&#xff1a; 方法一&a…

低代码平台是否能替代电子表格?

在计算机技术普及之前&#xff0c;会计、助理或者是销售人员&#xff0c;都需要用纸和笔来记录和维护每一笔交易。计算机技术兴起之后&#xff0c;一项技术发明——电子表格的出现改变了低效的状况。电子表格的第一个版本出现在1977年&#xff0c;一个名为“VisiCalc”的程序。…

OpenCV(二十七):图像距离变换

1.像素间距离 2.距离变换函数distanceTransform() void cv::distanceTransform ( InputArray src, OutputArray dst, int distanceType, int maskSize, int dstType CV_32F ) src:输入图像&#xff0c;数据类型为CV8U的单通道图像dst:输出图像&#xff0c;与输入图像…

2023-09-07 LeetCode每日一题(修车的最少时间)

2023-09-07每日一题 一、题目编号 2594. 修车的最少时间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 ranks &#xff0c;表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你…

WebServer 解析HTTP 请求报文

一、TCP 状态转换 浏览器访问网址&#xff0c;TCP传输全过程 二、TCP协议的通信过程 三、TCP 通信流程 // TCP 通信的流程 // 服务器端 &#xff08;被动接受连接的角色&#xff09; 1. 创建一个用于监听的套接字- 监听&#xff1a;监听有客户端的连接- 套接字&#xff1a;这…

C#开发的OpenRA游戏之系统参数选项按钮

C#开发的OpenRA游戏之系统参数选项按钮 前面分析了信标按钮,从图上可以看到,靠右边的按钮,就是系统参数选项按钮: 这个按钮与前面三个按钮是不一样的,虽然它们在排列位置上是放在一起,但是处理的方法方式是不一样的,因为这个选项按钮,并不需要发命令给服务器,再返回来…

Kafka的文件存储与稀疏索引机制

![在这里插入图片描述](https://img-blog.csdnimg.cn/dde7fc866d214985baaa87300a472578.png)这些是存储在分区(分区才是实际的存储)文件中的. seg是逻辑概念 而实际由log存储的. index是偏移量索引而timeindex是时间戳索引 log就是seg 找数据就是先找log 再从log去找

使用aidlux进行模型迁移、部署、推理

AidLux是一个构建在ARM硬件上&#xff0c;基于创新性跨Android/鸿蒙 Linux融合系统环境的智能物联网 (AIoT) 应用开发和部署平台。 说的直白点&#xff0c;aidlux就是一个在arm架构芯片的设备上运行的linux系统&#xff0c;我们可以将身边的安卓设备当作边缘设备&#xff0c;在…

stm32f4_奇怪的bug_串口数据错乱,一个串口收到另一个串口的数据

1、开发环境简介 芯片型号&#xff1a;stm32f407igt6 官方库函数&#xff1a;HAL库 2、bug现象描述和原因推测 使用了2个串口&#xff0c;一个是串口5-波特率115200&#xff0c;一个是串口4-波特率9600&#xff0c;但是串口4时不时会收到上一次发给串口5的数据。不是同一个串…

【计算机网络】 IP协议格式以及以太网帧结构

文章目录 IP协议格式以太网帧结构 IP协议格式 IP工作在网络层 IP头分为两部分&#xff0c;固定部分和可变部分&#xff0c;固定部分就是一定要带这些数据&#xff0c;正常存储应该是连续的&#xff0c;并不是像图中这样会换行&#xff0c;图中只是为了方便观察。 首先是一个版…

论数据库的种类

摘要 数据库是现代信息管理和数据存储的重要工具&#xff0c;几乎在各个领域都有广泛应用。不同类型的数据库适用于不同的应用场景和需求。本文将介绍几种常见的数据库种类&#xff0c;并探讨它们的特点和适用范围。 正文 一、关系型数据库&#xff08;RDBMS&#xff09; 关…

自定义封装异步任务组件,实现FutureTask功能

FutureTask 在 JDK1.8 后的异步编排API中的CompletableFuture&#xff0c;提供了 异步任务的成功回调、异常回调。 public class FutureTaskTest {public static void main(String[] args) throws Exception {CompletableFuture<String> future CompletableFuture.sup…

kodi的IPTV直播源爬取

安装了kodi的IPTV插件后&#xff0c;就能看电视&#xff0c;但是网上的直接源不太稳定。想起家里的有个魔百盒hm201是可以看电视和点播&#xff0c;就想通过爬取魔百盒里的直播源实现家里的打造自己基本稳定直播源&#xff0c;实现全屋的电视自由。 原文地址&#xff1a; IPTV直…

U-net网络学习记录

U-net网络 本质上是一个用于图像分割的神经网络 输入是一幅图&#xff0c;输出是目标的分割结果。继续简化就是&#xff0c;一幅图&#xff0c;编码&#xff0c;或者说降采样&#xff0c;然后解码&#xff0c;也就是升采样&#xff0c;然后输出一个分割结果。根据结果和真实分…

全球顶尖开源项目相聚外滩大会,绘制国际化开源生态新蓝图

在科技快速发展的当下&#xff0c;开放协作已成为技术创新的催化剂。在全球范围内&#xff0c;开源也是科技交流的永恒主题。 9月7日&#xff0c;2023外滩大会开源分论坛在上海举行。本次论坛由蚂蚁集团主办&#xff0c;以“打造国际化的开源开放创新生态”为主题&#xff0c;…

# 如何使用 GitHub Copilot 发送 Tweet(译)

文章目录 首先&#xff0c;什么是 GitHub Copilot为什么我使用GitHub Copilot 发送 Tweet&#xff1f;理由 1理由 2理由 3 它对你来说有什么价值&#xff1f;如何使用 Copilot 发送推文步骤一&#xff1a;注册 Twitter 开发者账户步骤二&#xff1a;在 Twitter 开发者平台创建应…