C++算法补充---STL

news/2024/7/26 10:52:53/文章来源:https://blog.csdn.net/qq_74098099/article/details/137218461

这里写目录标题

  • C++STL
    • 容器
      • 字符串函数(string容器函数)
        • 字符串转字符
    • 算法
      • 交换函数
      • 拿到容器或者数组的第一个最大(小)值元素的下标或者值
      • 排序函数
      • 求字符数组的有效长度
      • atoi函数(将字符串类型的数字转为真正的int型数字)
      • string转字符 再将数字字符转为int型数字
      • ceil向上取整(注意double)
      • 向下取整(注意double)
      • 四舍五入(用于四舍五入为整数)(注意double)
      • 四舍五入2(使用自定义函数或者printf,同样只能用于四舍五入为整数)
      • 用于小数的四舍五入(四舍五入保留小数的?位)
      • 补充前导0
      • 绝对值
      • sort降序(自定义排序)
      • 全排列

C++STL

容器

字符串函数(string容器函数)

字符串转字符

在这里插入图片描述
string对象调用data()函数 会返回他的 const char* 也就是字符数组 之后取单个字符即可

算法

交换函数

在这里插入图片描述
swap(int a,int b)
可以交换a和b的位置 是C++的库函数 直接用即可

拿到容器或者数组的第一个最大(小)值元素的下标或者值

在这里插入图片描述
如果不加* 那么拿到的就是下标 (但是要减去首地址或者第一个迭代器)
如果加星 那么就会直接输出最大值

排序函数

在这里插入图片描述
其中的sort是排序函数 传入两个参数 第一个是字符串的第一个字符 第二个是字符串的最后一个字符 他是一个实参形参同步的函数 没有返回值 但是会把字符串进行排序 并同步实参

在这里插入图片描述
sort()使用时要包含头文件#include 之后传入参数 有三个 第一个参数是待排序的第一个元素的指针 第二个参数是待排序的最后一个元素的指针 第三个是排序规则 可以不写 不写的话默认从小到大

如果想从大到小 可以传入greater()

或者也可以自定义排序规则 定义一个返回值为bool的函数 参数传入两个数
具体规则 可以将两个数想象为先后传入 想象为待排序数组(或字符串)中的相邻的两个元素 之后比较返回真假值就可以确定比较法则
在这里插入图片描述

求字符数组的有效长度

!!! 对于第一种方式要包含头文件《cstring》
在这里插入图片描述
第二种方式 由于结尾\0的存在 输出的数会多一个 减去即可

对于非字符数组:
在这里插入图片描述
没有尾字符 所以数是对的

这里补充 单纯的end() 和begin()函数 会直接返回数组的首指针 和 尾指针的下一个

atoi函数(将字符串类型的数字转为真正的int型数字)

在这里插入图片描述
在这里插入图片描述
无需包含cstdlib头文件,但是要把string转为char *
使用s.c_str()即可,(无需包含文件)
其中s是字符串,如下图:
在这里插入图片描述

string转字符 再将数字字符转为int型数字

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

首先通过图中通过key得到了value 是一个string类型的字符 调用string函数 c_str()函数 转为字符数组类型 然后用atoi(字符数组)再将数字字符转为int型数字

详情可查阅算法专栏“算法知识+错题本”一文中STL部分

ceil向上取整(注意double)

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

ceil(a),如果a是2.5,那么结果就是3;如果结果是2.0000001,那么结果还是3

向下取整(注意double)

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

四舍五入(用于四舍五入为整数)(注意double)

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

四舍五入2(使用自定义函数或者printf,同样只能用于四舍五入为整数)

printf(“%.xf”,x)可以实现四舍五入
.0f,是保留到整数,四舍五入
在这里插入图片描述
在这里插入图片描述
仅用于整数四舍五入
如果用于小数:那么要满足要保留的位数后面还有两个有效数字,编号为1、2,2号不能为0

用于小数的四舍五入(四舍五入保留小数的?位)

在这里插入图片描述

补充前导0

一种补充前导0的办法。printf(“%02d”,x)表示输出两位数字,如果x是个位,就在前面补0,如果x是两位数,则忽略前面那个0

绝对值

在这里插入图片描述

sort降序(自定义排序)

在这里插入图片描述
如果是结构体,那么传入引用

全排列

全排列有两个API,一个是next_permutation(初始迭代器,尾后迭代器),一个是pre_permutation(初始迭代器,尾后迭代器),二者的用法均如下图所示,首先定义一个数组,或者其他容器,(按顺序存储),然后进行do-while循环,就可以将全排列之后的结果返回出来
在这里插入图片描述
在这里插入图片描述

特别注意:要注意数据顺序的差异,如果使用next_permutation,那么要按升序顺序存储数据,如果是pre_permutation,那么就按降序顺序存储数据,不然会出现下图这种情况:
在这里插入图片描述

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

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

相关文章

06 | Swoole 源码分析之 Coroutine 协程模块

首发原文链接:Swoole 源码分析之 Coroutine 协程模块 大家好,我是码农先森。 引言 协程又称轻量级线程,但与线程不同的是;协程是用户级线程,不需要操作系统参与。由用户显式控制,可以在需要的时候挂起、或…

【大模型】大模型 CPU 推理之 llama.cpp

【大模型】大模型 CPU 推理之 llama.cpp llama.cpp安装llama.cppMemory/Disk RequirementsQuantization测试推理下载模型测试 参考 llama.cpp 描述 The main goal of llama.cpp is to enable LLM inference with minimal setup and state-of-the-art performance on a wide var…

鸿蒙HarmonyOS应用开发之在非ArkTS线程中回调ArkTS接口

场景介绍 ArkTS是单线程语言,通过NAPI接口对ArkTS对象的所有操作都须保证在同一个ArkTS线程上进行。本示例将介绍通过napi_get_uv_event_loop和uv_queue_work实现在非ArkTS线程中通过NAPI接口回调ArkTS函数。 使用示例 接口声明、编译配置以及模块注册 接口声明 …

应急响应靶机训练-Linux2题解

前言 接上文,应急响应靶机训练Linux2 靶机地址:应急响应靶机-Linux(2) 题解 登录虚拟机: 修改面板密码 提交攻击者IP 答案:192.168.20.1 查看宝塔日志即可 用的net直接是网关 提交攻击者修改的管理员密码(明文) 答案&…

SpringBoot:自定义线程池配置类

文章目录 一、前言二、案例展示1、初始版本2、代码审核意见和优化建议3、潜在问题和风险4、优化建议5、优化后的代码 三、具体使用 一、前言 有时候我们在项目中做一些长链路的跑批任务时,基于Springboot项目的定时任务,我们可以指定一个自定义的线程配…

RVM安装Ruby笔记(Mac)

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

2024最新华为OD机试试题库全 -【二叉树的广度搜索】- C卷

1. 🌈题目详情 1.1 ⚠️题目 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。 1.2 🔣输入要求 每个输入文…

【服务端】node.js详细的配置

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【面试专题】设计模式

1.说一下开发中需要遵守的设计原则? 设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下: 1、单一职责原则 单一职责原则的定义描述非…

C++ —— C++11新增语法

目录 一,列表初始化 1.1 这是什么? 1.2 initializer_list 1.3 在容器的运用 1.4 STL中的变化 二,右值引用和左值引用 2.1 是什么? 2.2 这两个东西有啥关系? 2.3 有啥用? 三,*移动构…

二维码门楼牌管理应用平台建设:实现数据高效整理与入库

文章目录 前言一、数据整理入库的重要性二、数据整理入库的流程三、数据整理入库的技术支持四、数据整理入库的挑战与对策 前言 随着城市管理的数字化和智能化发展,二维码门楼牌管理应用平台成为了城市治理的新宠。本文将探讨如何通过数据整理入库这一关键环节&…

InternLM

任务一 运行1.8B模型,并对话 User >>> 请创作一个 300 字的小故事 在一片茂密的森林里,住着一只小松鼠,它的名字叫做小雪。小雪非常活泼好动,经常在树上跳跃玩耍。有一天,小雪发现了一个神秘的洞穴&#xf…

莫队算法学习笔记

Part.1 引入 当你遇到一个区间询问但是难以用线段树等 log 算法维护的时候怎么办?那就是——莫队! 莫队这个东西能支持区间修改、区间查询的操作,但是这种算法要求离线。莫队有很多种,详细请看下文。 Part.2 普通莫队 我们先来…

Spark源码(二)-Netty简介

一、Netty简介 Netty 是一个异步事件驱动的网络通信应用框架,用于快速开发可维护的高性能服务器和客户端。简单地说Netty封装了JDK的NIO,不用再写一大堆复杂的代码,从NIO各种繁复的细节中脱离出来,让开发者重点关心业务逻辑。 二…

Java 设计模式系列:备忘录模式

简介 备忘录模式是一种软件设计模式,用于在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定…

Micron FY24 Q2业绩强劲,凭内存实现翻盘

根据TechInsights数据显示,美光科技24财年第二季度业绩强劲,公司通过技术创新和产能优化,成功抓住了AI服务器和其他高性能应用带来的市场需求增长机遇。尽管短期内面临供应紧张的问题,但美光通过加大研发投入和产能转换力度&#…

计算机网络基础——网络安全/ 网络通信介质

chapter3 网络安全与管理 1. 网络安全威胁 网络安全:目的就是要让网络入侵者进不了网络系统,及时强行攻入网络,也拿不走信息,改不了数据,看不懂信息。 事发后能审查追踪到破坏者,让破坏者跑不掉。 网络…

基于java+SpringBoot+Vue的时间管理系统设计与实现

基于javaSpringBootVue的时间管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 时间管理系统是一个基于Internet的应用程序,旨在…

JavaBean是什么?

Bean的本意为豌豆、子实,在这里引申为一种实体。JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性&#xff0…

【unity】unity安装及路线图

学习路线图 二、有关unity的下载 由于unity公司是在国外,所以.com版(https://developer.unity.cn/)不一定稳定,学习时推荐从.cn国内版(https://developer.unity.cn/)前往下载,但是后期仍需回…