【STL】7.STL常用算法(1)
STL常用算法(1)
- 前言
- 简介
- 一.遍历算法
- 1.for_each
- 2.transform
- 二.查找算法
- 1.find
- 2.find_if
- 3.adjacent_find
- 4.binary_search
- 5.count
- 6.cout_if
- 三.排序算法
- 1.sort
- 2.random_shuffle
- 3.merge
- 4.reverse
- 总结
前言
stl系列主要讲述有关stl的文章,使用STL可以大大提高程序开发的效率和代码的可维护性,且在算法比赛中,STL可以帮助我们更方便地实现各种算法。提高我们的效率。
简介
算法主要是头文件algorithm,functional,numeric组成
1.algorithm是所有STL头文件中最大的一个,范围涉及到比较,交换,查找,遍历操作,复制,修改等等
2.numeric体积很小,只包括几个在序列上面进行简单的数学运算的模板函数
3.functional定义了一些模板类,用以声明函数对象
一.遍历算法
都在algorithm头文件中
for_each();//遍历容器
transform();//搬运容器到另一个容器中
1.for_each
for_each(first, last, f);//first和last为输出迭代器定义了要操作的范围,为左闭右开即[first, last)。f是一个函数或函数对象
如:
#include <iostream>
#include <algorithm>
#include<vector>
using namespace std;void print(int num) {//打印函数cout << num << " ";
}int main() {vector<int> n = { 1, 2, 3, 4, 5 };for_each(n.begin(), n.end(), print);return 0;
}
2.transform
taransform(first1, last1, first2, f)//first1和last1为输出迭代器定义了要操作的范围,为左闭右开即[first, last)。firts2是目标容器的迭代器,f是一个函数或函数对象
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int re(int num) {//函数可以返回任意值如num*num等return num;
}
void print(int num) {cout << num << " ";
}int main() {vector<int> n1 = { 1, 2, 3, 4, 5 };vector<int> n2;n2.resize(n1.size());//要提前开辟空间transform(n1.begin(), n1.end(), n2.begin(), re);for_each(n2.begin(), n2.end(), print);return 0;
}
二.查找算法
find();//查找元素
find_if();//按条件查找元素
adjacent_find();//查找相邻重复元素
binary_search();//二分查找法
count();//统计元素个数
count_if();//按条件统计元素个数
1.find
find(first, last, value);//find的查找范围为[first, last),value是要查找的值,r如果没有就返回last,有就返回所在位置
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1, 2, 3, 4, 5};vector<int>::iterator i = find(n.begin(), n.end(), 1);if (i == n.end()) {cout << "no" << endl;}else {cout << "yes" << endl;}return 0;
}
2.find_if
find_if(first, last, f);//在指定范围内查找满足特定条件的第一个元素,f为函数
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool f(int num) {return num > 3;
}int main() {vector<int> n = { 1, 2, 3, 4, 5};vector<int>::iterator i = find_if(n.begin(), n.end(), f);if (i != n.end()) {cout << *i << endl;}else {cout << "no" << endl;}return 0;
}
3.adjacent_find
find_if(first, end);//查找相邻重复元素,返回相邻元素的第一个位置的迭代器
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1 ,2, 4, 2, 5 };vector<int>::iterator p = adjacent_find(n.begin(), n.end());if (p != n.end()) {cout << *p << endl;}else {cout << "no" << endl;}return 0;
}
4.binary_search
binary_search();//查找指定元素是否存在,放回一个布尔值
//在无序条件序列不可用
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1, 2, 3, 4, 5 };bool b = binary_search(n.begin(), n.end(), 3);if (b) {cout << "yes" << endl;}else {cout << "no" << endl;}return 0;
}
5.count
count(first, last, value);//查找一定范围内是否有值为value
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1,2,3,4,5,6 };bool b = count(n.begin(), n.end(), 4);if (b) {cout << "yes" << endl;}else {cout << "no" << endl;}return 0;
}
6.cout_if
cout_if(first, last, f);//查找一定范围内,查找f功能的函数,有几个
如:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;bool f(int num) {return num > 3;
}int main() {vector<int> n = { 1,2,3,4,5 };int sum = count_if(n.begin(), n.end(), f);cout << sum << endl;return 0;
}
三.排序算法
sort();//对容器内元素进行排序
random_shuffle();//指定范围内的元素随机调整次序
merge();//合并容器元素,两个容器必须是有序的
reverse();反转
1.sort
sort(first, last, comp);//在first到last的范围内从小到大排序,可以利用comp自定义
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 3,4,2,1,7,6 };sort(n.begin(), n.end());for (int i : n) {cout << i << " ";}return 0;
}
2.random_shuffle
rand_suffle(first, last);//指定范围内的元素随机调整次序
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1,2,3,4,5,6 };srand((unsigned int)time(0));random_shuffle(n.begin(), n.end());for (int i : n) {cout << i << " ";}return 0;
}
3.merge
merge(first1 end1, first2, end2, first3);//将first1到last1和first2到last2合并到first3中,其中两个容器必须是有序的
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n1 = { 1,3,5,7 };vector<int> n2 = { 2,4,6,8 };vector<int> n3(8);merge(n1.begin(), n1.end(), n2.begin(), n2.end(), n3.begin());for (int i : n3) {cout << i << " ";}return 0;
}
4.reverse
reverse(first, last);//在first和last范围内反转
如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> n = { 1,2,3,4,5 };reverse(n.begin(), n.end());for (int i : n) {cout << i << " ";}return 0;
}
总结
希望大家点赞收藏我会尽快更新STL!!!
相关文章:
【STL】7.STL常用算法(1)
STL常用算法(1) 前言简介一.遍历算法1.for_each2.transform 二.查找算法1.find2.find_if3.adjacent_find4.binary_search5.count6.cout_if 三.排序算法1.sort2.random_shuffle3.merge4.reverse 总结 前言 stl系列主要讲述有关stl的文章,使用S…...

uniapp 本地数据库多端适配实例(根据运行环境自动选择适配器)
项目有个需求,需要生成app和小程序,app支持离线数据库,如果当前没有网络提醒用户开启离线模式,所以就随便搞了下,具体的思路就是: 一个接口和多个实现类(类似后端的模板设计模式)&am…...

百度觉醒,李彦宏渴望光荣
文 | 大力财经 作者 | 魏力 2025年刚刚开年,被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下,这支团队以不到ChatGPT 6%的训练成本,成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世,…...
【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题
最近,linux服务器遇到一个奇怪的问题,能ping通github,但是无法clone git项目,尝试了各种大模型,都提到代理啥的问题,发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false,才解决问题…...

SOME/IP-SD -- 协议英文原文讲解3
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.4…...

软件测试八股文,软件测试常见面试合集【附答案】
PS:加上参考答案有几十万字,答案就没有全部放上来了,高清打印版本超过400多页,评论区留言直接获取 1、你的测试职业发展是什么? 2、你认为测试人员需要具备哪些素质 3、你为什么能够做测试这一行 4、测试的目的是什么? 5、…...

数据结构秘籍(一)线性数据结构
1.数组 数组(Array)是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)计算出该元素对应的存储地址。 数组的特…...

TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...

使用消息队列怎样防止消息重复?
大家好,我是君哥。 使用消息队列时,我们经常会遇到一个可能对业务产生影响的问题,消息重复。在订单、扣款、对账等对幂等有要求的场景,消息重复的问题必须解决。 那怎样应对重复消息呢?今天来聊一聊这个话题。 1.三…...
MySQL安装多版本与版本切换
起因 今天在将一个项目部署到本地,想着是先找到一个功能差不多的开源项目,再在这基础之上进行改动,找到的这个项目使用的MySQL版本是MySQL5.7,应该是比较古早的项目了,但是我现在装的是8.4版本的,所以涉及…...

Docker02 - 深入理解Docker
深入理解Docker 文章目录 深入理解Docker一:Docker镜像原理1:镜像加载原理1.1:unionFS1.2:加载原理 2:分层理解 二:容器数据卷详解1:什么是容器数据卷2:使用数据卷3:具名…...
检查SSH安全配置-sshd服务端未认证连接最大并发量配置
介绍 MaxStartups参数指到SSH守护进程的未经身份验证的最大并发连接数。 逻辑依据 为防止系统因大量待处理的身份验证连接尝试而出现拒绝服务的情况,请使用 MaxStartups 的速率限制功能来保护 sshd 登录的可用性,并防止守护进程不堪重负。 检查方法 …...

HarmonyOS Design 介绍
HarmonyOS Design 介绍 文章目录 HarmonyOS Design 介绍一、HarmonyOS Design 是什么?1. 设计系统(Design System)2. UI 框架的支持3. 设计工具和资源4. 开发指南5. 与其他设计系统的对比总结 二、HarmonyOS Design 特点 | 应用场景1. Harmon…...
C++中的多重继承
在 C 中,多重继承是一种允许一个类同时继承多个基类的特性。这意味着派生类可以继承多个基类的属 性和方法。 多重继承增加了语言的灵活性,但同时也引入了额外的复杂性,特别是当多个基类具有相同 的成员时。 基本概念 在多重继承中ÿ…...

Java基础第14天-坦克大战【1】
Java绘图坐标体系 像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。如,计算机显示器的分辨率是800x600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个密度单位。…...

Java线程池入门04
1. 提交任务的两种方式 executorsubmit 2. executor executor位于Executor接口中 public interface Executor {void executor(Runnable command); }executor提交的是无返回值的任务 下面是一个具体的例子 package LearnThreadPool; import java.util.concurrent.ExecutorSe…...

【论文笔记-ECCV 2024】AnyControl:使用文本到图像生成的多功能控件创建您的艺术作品
AnyControl:使用文本到图像生成的多功能控件创建您的艺术作品 图1 AnyControl的多控制图像合成。该研究的模型支持多个控制信号的自由组合,并生成与每个输入对齐的和谐结果。输入到模型中的输入控制信号以组合图像显示,以实现更好的可视化。 …...
计算机毕业设计 ——jspssm519Springboot 的幼儿园管理系统
作者:程序媛9688 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题)…...

山东大学软件学院人工智能导论实验之知识库推理
目录 实验目的: 实验代码: 实验内容: 实验结果 实验目的: 输入相应的条件,根据知识库推理得出相应的知识。 实验代码: def find_data(input_process_data_list):for epoch, data_process in enumerat…...

【Uniapp-Vue3】点击将内容复制到剪切板
具体使用方法在官网: uni-app官网https://uniapp.dcloud.net.cn/api/system/clipboard.html大致使用方法如下: // value是需要复制的值 function copyValue (value) { uni.setClipboardData({data: value,success: res>{// 复制成功逻辑},fail:err&…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

break 语句和 continue 语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行 break break语句用于跳出代码块或循环 1 2 3 4 5 6 for (var i 0; i < 5; i) { if (i 3){ break; } console.log(i); } continue continue语句用于立即终…...