string 的接口

        我们继续来讲解一些常用的string接口。

        一.at接口

        

        我们来看一个越界的问题。

        我们运行之后发现这是一个断言错误,直接就终止我们的程序了,不能作为异常被捕捉到,但是我们如果不想让程序直接崩溃该怎么办呢?

        此时我们就要用到at关键字了。

        at 函数的重要特性是会进行边界检查。若传入的索引超出字符串的有效范围(即 pos >= str.size()),它会抛出 std::out_of_range 异常。

        

       

        此时程序不会直接崩溃而是抛出一个异常。

        

二 push_back

        这个就是添加元素的。

        

        此时s1就是x了。

        这个没什么讲的,一次只能插入一个字符。

        

三.append

        这个就是添加字符串的,可以一次添加多个元素。

        

        就是把这个字符串给添加上去了。

        

        我们可以看到有六个用法,大家感兴趣的都可以试试,我只讲一些常用的吧。

        

        我们来看一下这个代码,capacity和size的大小都是不带/0的。

        下面两个就是常用的,可以通过迭代器的形式来给它值,最后一个append表示我们从s2的第六个开始,把后面都加上去,也就是wrold。

                        

      

        这样也是可以的,这是因为实现了运算符的重载。

        

        


四.思考     

  下面我们来思考一下,size>capacity的时候,系统是怎么扩容呢?

        我们来研究一下。

        

        我们运行一下看一下。

        

        我们发现是1.5倍左右(每个编译器都是不同的),但是第一次扩容为什么会是两倍呢?

        因为我们可以认为是编译器优化吧,vs如果你小于16的话,它是会有一个Buff数组来存放这些数据的,这样会减少内存碎片,你要是超过这个大小才会扩容,第一次就是buff的二倍,以后才是原来的1.5倍数来扩容的。

        我们用g++来演示一下。

        

        我们看到g++的扩容原则是两倍两倍的扩容。

        

        


五.reserve

      这个接口的主要作用就是用来扩容的。

          

        我们来看一下这个图,当我们的预留空间小于size的时候。

        要遵守这个原则,不能影响原来的内容,所以小于size的时候,一定不会缩容的,大于capacity一定是要扩容的,但是大于size小于capacity的时候就不一定缩容了,可能缩容也可能不缩容。

        

        

        我们发现并没有缩容的情况,我们再在g++上试一下。

        

        我们发现在g++上出现了缩容现象。

        



六.resize

        

        这个的主要作用就是改变size 的大小的。

        

        如果给的这个数小于size的大小就会删除多余的数据,大于size小于capacity的话就会插入数据,不给第二个参数,如图第二行就会用/0来补充,大于capacity的话就会扩容和插入数据。

        

        



七.insert

        

        我们来看一下,第一个insert,就是在0位置插入hello,我们要是只想插入一个char类型的单个字符怎么办呢?

        就是第二个insert,就是在0位置插入1个a,尽量还是不要用insert,因为它的时间复杂度是o(n),会使效率很低。

        

        



八.erase

                       我们主要用第一个和第三个,第一个就是第二个erase,那个npos你可以理解为无穷大,不给值就会用缺省值,表示删除第五个以后的元素, 第一个erase表示删除第五个后面的两个元素也就是第六个和第七个。

        



九.结束语

         感谢大家的查看,希望可以帮助到大家,做的不是太好还请见谅,其中有什么不懂的可以留言询问,我都会一一回答。  感谢大家的一键三连。

      

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

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

相关文章

DeepSeek调用API访问,使用AnythingLLM建立本地知识库后开放API调用,ApiFox/PostMan调用本地DeepSeek

上篇文章中我们使用AnythingLLM成功在本地部署了DeepSeek的本地知识库,并且上传了几个文件让DeepSeek学习,可点击查看: 本地部署DeepSeek并使用AnythingLLM建立本地知识库全流程,DeepSeek-R1:7b本地安装部署,DeepSeek-R1本地部署…

创新NDT解决方案:XARION激光超声系统助力航空航天材料的高效监测

XARION激光超声检测系统是一种高效的无损检测工具,它利用激光技术产生超声波信号,并通过无膜光学麦克风捕捉这些信号,提供非接触式的超声检测解决方案。该系统适用于多种材料和复杂表面的检测,满足工业、医疗和科研领域的严格标准…

基于 PHP 内置类及函数的免杀 WebShell

前言 PHP 作为广泛使用的服务端语言,其灵活的内置类(如 DOMDocument)和文件操作机制(.ini、.inc 的自动加载),为攻击者提供了天然的隐蔽通道。通过 动态函数拼接、反射调用、加密混淆 和 伪命名空间 等手法…

Arduino、ESP32驱动BME688环境传感器(环境传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 4.1、读取数据(无IAQ指数) 4.2、读取数据(带IAQ数值) BME688环境传感器是一款四合一MEMS环境传感器,可测量VOC(挥发性有机物)、温度、湿度、气压这四个参数,非常适用于监测空气质量。由于…

数据结构——顺序栈seq_stack

前言:大家好😍,本文主要介绍了数据结构——顺序栈 目录 一、概念 1.1 顺序栈的基本概念 1.2 顺序栈的存储结构 二、基本操作 2.1 结构体定义 2.2 初始化 2.3 判空 2.4 判满 2.5 扩容 2.6 插入 入栈 2.7 删除 出栈 2.8 获取栈顶元…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…

AI音乐生成革命:解读昆仑万维Mureka O1的技术突破与应用实践

AI音乐生成革命:解读昆仑万维Mureka O1的技术突破与应用实践 全球音乐产业正经历AI技术重塑,昆仑万维最新发布的音乐推理大模型Mureka O1引发行业震动。本文深度解析其技术原理与实测表现,揭开AI音乐创作新纪元的技术密码 一、技术演进&…

《Operating System Concepts》阅读笔记:p483-p488

《Operating System Concepts》学习第 40 天,p483-p488 总结,总计 6 页。 一、技术总结 1.object storage (1)object storage 管理软件 Hadoop file system(HDFS)、Ceph。 二、英语总结(生词:1) 1.commodity (1)commodity: com-(“tog…

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN:通过噪声层实现探索,替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中,智能体(Agent)通过与环境交互学习最优策略。当状态空间或动…

“11.9元“引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 ✨

💥 "11.9元"引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 🎯 🔍 用 Mermaid原生防御体系图 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…

Cortex-M7进入异常中断分析

使用cmbacktrace库,其支持M3,4,7。 1、串口输出异常信息 #define cmb_println(...) Debug_Printf(__VA_ARGS__)//cmb_println处理可变参数和格式化字符串 int Debug_Printf(const char *fmt, ...) {char buffer[DEBUG_TxBUFLEN];INT16U n;va_list args;va_star…

如何管理间接需求?团队实践分享

管理间接需求的核心方法包括明确需求识别流程、建立规范的需求管理体系、实施有效的需求沟通机制。 其中,明确需求识别流程最为关键。企业在实际业务中,往往会遇到大量的间接需求,如非直接生产性的采购需求、服务类需求等。这些需求往往隐蔽性…

与Aspose.pdf类似的jar库分享

如果你在寻找类似于 Aspose.PDF 的 JAR 库,这些库通常用于处理 PDF 文档的创建、编辑、转换、合并等功能。以下是一些类似的 Java 库,它们提供 PDF 处理的功能,其中一些是收费的,但也有开源选项: 1. iText (iText PDF…

2-2 MATLAB鮣鱼优化算法ROA优化CNN超参数回归预测

本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 目录 0.引言 1.ROA优化CNN 2.主程序调用 3.结语 0.引言 在博客【ROA优化LSTM超参数回归】中,我们采用ROA对LSTM的学习率、迭代次数…

企业入驻成都国际数字影像产业园,可享150多项专业服务

企业入驻成都国际数字影像产业园,可享150多项专业服务 全方位赋能,助力影像企业腾飞 入驻成都国际数字影像产业园,企业将获得一个涵盖超过150项专业服务的全周期、一站式支持体系,旨在精准解决企业发展各阶段的核心需求&#xf…

线路板元器件介绍及选型指南:提高电路设计效率

电路板(PCB)是现代电子设备的核心,其上安装了各类电子元器件,这些元器件通过PCB的导电线路彼此连接,实现信号传输与功能执行。 元器件的选择与安装直接决定了电子产品的性能与稳定性。本文将为大家详细介绍电路板上的…

探究 Arm Compiler for Embedded 6 的 Clang 版本

原创标题:Arm Compiler for Embedded 6 的 Clang 版本 原创作者:庄晓立(LIIGO) 原创日期:20250218(首发日期20250326) 原创连接:https://blog.csdn.net/liigo/article/details/14653…

RedHat7.6_x86_x64服务器(最小化安装)搭建使用记录(二)

PostgreSQL数据库部署管理 1.rpm方式安装 挂载系统安装镜像: [rootlocalhost ~]# mount /dev/cdrom /mnt 进入安装包路径: [rootlocalhost ~]# cd /mnt/Packages 依次安装如下程序包: [rootlocalhost Packages]# rpm -ihv postgresql-libs-9…

浏览器存储 IndexedDB

IndexedDB 1. 什么是 IndexedDB? IndexedDB 是一种 基于浏览器的 NoSQL 数据库,用于存储大量的结构化数据,包括文件和二进制数据。它比 localStorage 和 sessionStorage 更强大,支持索引查询、事务等特性。 IndexedDB 主要特点…

panda3d 渲染

目录 安装 设置渲染宽高: 渲染3d 安装 pip install Panda3D 设置渲染宽高: import panda3d.core as pdmargin 100 screen Tk().winfo_screenwidth() - margin, Tk().winfo_screenheight() - margin width, height (screen[0], int(screen[0] / 1…