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

【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常用算法&#xff08;1&#xff09; 前言简介一.遍历算法1.for_each2.transform 二.查找算法1.find2.find_if3.adjacent_find4.binary_search5.count6.cout_if 三.排序算法1.sort2.random_shuffle3.merge4.reverse 总结 前言 stl系列主要讲述有关stl的文章&#xff0c;使用S…...

uniapp 本地数据库多端适配实例(根据运行环境自动选择适配器)

项目有个需求&#xff0c;需要生成app和小程序&#xff0c;app支持离线数据库&#xff0c;如果当前没有网络提醒用户开启离线模式&#xff0c;所以就随便搞了下&#xff0c;具体的思路就是&#xff1a; 一个接口和多个实现类&#xff08;类似后端的模板设计模式&#xff09;&am…...

百度觉醒,李彦宏渴望光荣

文 | 大力财经 作者 | 魏力 2025年刚刚开年&#xff0c;被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下&#xff0c;这支团队以不到ChatGPT 6%的训练成本&#xff0c;成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世&#xff0c;…...

【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题

最近&#xff0c;linux服务器遇到一个奇怪的问题&#xff0c;能ping通github&#xff0c;但是无法clone git项目&#xff0c;尝试了各种大模型&#xff0c;都提到代理啥的问题&#xff0c;发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false&#xff0c;才解决问题…...

SOME/IP-SD -- 协议英文原文讲解3

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

软件测试八股文,软件测试常见面试合集【附答案】

PS&#xff1a;加上参考答案有几十万字&#xff0c;答案就没有全部放上来了&#xff0c;高清打印版本超过400多页&#xff0c;评论区留言直接获取 1、你的测试职业发展是什么? 2、你认为测试人员需要具备哪些素质 3、你为什么能够做测试这一行 4、测试的目的是什么? 5、…...

数据结构秘籍(一)线性数据结构

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

TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手

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

使用消息队列怎样防止消息重复?

大家好&#xff0c;我是君哥。 使用消息队列时&#xff0c;我们经常会遇到一个可能对业务产生影响的问题&#xff0c;消息重复。在订单、扣款、对账等对幂等有要求的场景&#xff0c;消息重复的问题必须解决。 那怎样应对重复消息呢&#xff1f;今天来聊一聊这个话题。 1.三…...

MySQL安装多版本与版本切换

起因 今天在将一个项目部署到本地&#xff0c;想着是先找到一个功能差不多的开源项目&#xff0c;再在这基础之上进行改动&#xff0c;找到的这个项目使用的MySQL版本是MySQL5.7&#xff0c;应该是比较古早的项目了&#xff0c;但是我现在装的是8.4版本的&#xff0c;所以涉及…...

Docker02 - 深入理解Docker

深入理解Docker 文章目录 深入理解Docker一&#xff1a;Docker镜像原理1&#xff1a;镜像加载原理1.1&#xff1a;unionFS1.2&#xff1a;加载原理 2&#xff1a;分层理解 二&#xff1a;容器数据卷详解1&#xff1a;什么是容器数据卷2&#xff1a;使用数据卷3&#xff1a;具名…...

检查SSH安全配置-sshd服务端未认证连接最大并发量配置

介绍 MaxStartups参数指到SSH守护进程的未经身份验证的最大并发连接数。 逻辑依据 为防止系统因大量待处理的身份验证连接尝试而出现拒绝服务的情况&#xff0c;请使用 MaxStartups 的速率限制功能来保护 sshd 登录的可用性&#xff0c;并防止守护进程不堪重负。 检查方法 …...

HarmonyOS Design 介绍

HarmonyOS Design 介绍 文章目录 HarmonyOS Design 介绍一、HarmonyOS Design 是什么&#xff1f;1. 设计系统&#xff08;Design System&#xff09;2. UI 框架的支持3. 设计工具和资源4. 开发指南5. 与其他设计系统的对比总结 二、HarmonyOS Design 特点 | 应用场景1. Harmon…...

C++中的多重继承

在 C 中&#xff0c;多重继承是一种允许一个类同时继承多个基类的特性。这意味着派生类可以继承多个基类的属 性和方法。 多重继承增加了语言的灵活性&#xff0c;但同时也引入了额外的复杂性&#xff0c;特别是当多个基类具有相同 的成员时。 基本概念 在多重继承中&#xff…...

Java基础第14天-坦克大战【1】

Java绘图坐标体系 像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。如&#xff0c;计算机显示器的分辨率是800x600&#xff0c;表示计算机屏幕上的每一行由800个点组成&#xff0c;共有600行&#xff0c;整个计算机屏幕共有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&#xff1a;使用文本到图像生成的多功能控件创建您的艺术作品 图1 AnyControl的多控制图像合成。该研究的模型支持多个控制信号的自由组合&#xff0c;并生成与每个输入对齐的和谐结果。输入到模型中的输入控制信号以组合图像显示&#xff0c;以实现更好的可视化。 …...

计算机毕业设计 ——jspssm519Springboot 的幼儿园管理系统

作者&#xff1a;程序媛9688 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xf…...

山东大学软件学院人工智能导论实验之知识库推理

目录 实验目的&#xff1a; 实验代码&#xff1a; 实验内容&#xff1a; 实验结果 实验目的&#xff1a; 输入相应的条件&#xff0c;根据知识库推理得出相应的知识。 实验代码&#xff1a; def find_data(input_process_data_list):for epoch, data_process in enumerat…...

【Uniapp-Vue3】点击将内容复制到剪切板

具体使用方法在官网&#xff1a; uni-app官网https://uniapp.dcloud.net.cn/api/system/clipboard.html大致使用方法如下&#xff1a; // value是需要复制的值 function copyValue (value) { uni.setClipboardData({data: value,success: res>{// 复制成功逻辑},fail:err&…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...