【小知识】站在前人的肩膀上写程序——STL库初阶算法函数的使用

devtools/2024/9/24 21:25:14/

【小知识】站在前人的肩膀上写程序——STL库初阶算法函数的使用

  • 1.墨水瓶算法和swap函数
  • 2.打擂台算法和max,min函数
  • 3.排序——sort函数

1.墨水瓶算法和swap函数

    如果想交换两个墨水瓶的墨水该怎么办呢?我们可以准备第三个墨水瓶将第一个墨水瓶的墨水倒到空的墨水瓶里第二个墨水瓶里的墨水倒到第一个墨水瓶里第三个墨水瓶里的墨水倒到第二个墨水瓶里,这样就完成交换了。

    我们可以模拟这个过程,交换两个变量的值,分装后的函数如下:(不懂的先不要管,后面会讲)。

void swap(int& x,int& y)
{int tmp=x;x=y;y=tmp;
}

当然,STL里提供了swap函数实现这一功能。需要包含algorithm头文件。

2.打擂台算法和max,min函数

    想要找到两数中的较大/较小值,只需要使用max函数或min函数就可以了。可以使用三目运算符实现。

int max(int a,int b)
{return a>b?a:b;
}
int min(int a,int b)
{return a<b?a:b;
}

    在algorithm头文件中,STL也提供了maxmin函数。

    如果想要实现找多个数中的最大/最小值,可以使用类似打擂台的方法。

    先设置一个很小(找最大值)/很大(找最小值)的初始值,即擂主。然后循环遍历数组更新擂主,即答案。分装好的函数如下:

int max_n=INT_MIN,min_n=INT_MAX;
void find_max(int a[],int n)//n代表数组的长度
{for(int i=1;i<=n;i++)max_n=max(a[i],max_n);
}
void find_min(int a[],int n)//n代表数组的长度
{for(int i=1;i<=n;i++)min_n=min(a[i],min_n);
}

3.排序——sort函数

    如果想要实现对数组的排序,可以简单粗暴地使用STL中的sort函数,和前面一样,需要包含algorithm头文件。语法如下:

sort(数组名+起始下表,数组名+终止下标+1,排序规则(函数));

常见的排序规则如下:

选项说明
equal_to< type >()等于
not_equal_to< type >()不等于
less< type >()小于
greater< type >()大于
less_equal< type >()小于等于
greater_equal< type >()大于等于

比如按从大到小排序
sort(a+1,a+n+1,greater<int>());//假设a是int类型的数组

当然,排序规则也可以不选,默认值为从小到大

也可以自己定义排序规则函数cmp,示例如下:

bool cmp(int a,int b)
{return a<b;//越小越靠前
}

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述


http://www.ppmy.cn/devtools/87956.html

相关文章

Docker镜像仓库

目录 前言 1. 常见的镜像仓库 2. 搭建私有镜像仓库 3. 私有库的推送、拉取镜像 4. 总结 前言 Docker镜像仓库简单来说就是存储和管理Docker镜像的平台或服务。它允许开发人员上传自己创建的镜像&#xff0c;并与团队成员共享和协作使用。 1. 常见的镜像仓库 镜像仓库有公…

PADS Router 扇出失败问题详细解决方法。

第一步&#xff1a;确定单位是一致的,我的单位是 “密尔”&#xff0c;不是“公制”。 第二步&#xff1a;进去pads router 右键选择特性&#xff0c;注意&#xff0c;是右键点击任意板框内空白位置的特性&#xff0c;这个是涵盖整体的设置&#xff0c;和单独点击一个元器件选…

基于docker的 nacos安装部署

一、拉取镜像 拉取nacos官方镜像&#xff0c;这里使用默认命令 docker pull nacos/nacos-server二、创建挂载目录 创建本地的映射文件application.properties mkdir -p /home/docker/nacos/conf /home/docker/nacos/logstouch /home/docker/nacos/conf/application.propert…

SQL Server数据库的黑匣子:实现自定义日志记录

SQL Server数据库的黑匣子&#xff1a;实现自定义日志记录 在数据库管理中&#xff0c;日志记录是监控和审计数据库活动的重要手段。SQL Server提供了多种日志记录机制&#xff0c;但有时这些默认的日志记录可能无法满足特定的业务需求。在这种情况下&#xff0c;实现数据库的…

【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器

【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器 一、项目介绍1.1 项目简介1.2 使用方法二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、拉取容器…

DUILib 创建自定义文本编辑控件

DUILib 是一个非常灵活的用户界面库&#xff0c;它允许我们轻松地创建和自定义各种控件。在这篇博客中&#xff0c;我们将详细解释一个自定义文本编辑控件的各个属性&#xff0c;并展示如何使用 DUILib 进行设置。 <!-- 文本编辑控件 --> <Edit pos"92,426,0,0&…

Framework源码整编、单编、烧录过程

目录 一.背景 二.整编方式 二.单编方式 三.烧录 一.背景 源码编译分为整编和单编,整编通常耗时较长,单编则速度很多,如果我们进行一个小的修改想要立马验证的话单编就很合适 二.整编方式 开始执行编译操作,总共三步. 执行source操作source build/envsetup.sh .执行lunc…

Charles抓包工具系列文章(七)-- Rewrite工具的应用示例

一、背景 客户端通过域名访问后端服务,在api网关层,会判断path的前缀,默认/api开头的请求都转发至后端服务A。 当前缀是/assist/api开头,请求将转发至后端服务B(部署在192.168.80.226,便于测试对比) 在不改动kong网关配置的情况下,现需要把后者的请求转发至192.168.…