有关string的部分接口

1.迭代器与反向迭代器(iterator-)

迭代器是可以用来访问string里面的内容的,这里来记录一下使用的方法。

里面用到了一个叫做begin函数和一个end函数,这两个都是针对string使用的函数。

s1.begin()函数是指向string内容的第一个元素

而s1.end()指向的则是最后一个元素的下一位

上面就是迭代器了,那什么是反向迭代器?

顾名思义,反向迭代器就是反方向来进行访问和迭代的方向与迭代器是相反的。

分别有rbegin()rend()

这里我们可以暂时理解成s1.begin()是指向这个s1的最后一个位置,而s1.rend()指向的是s1第一个的前一个位置,这边是有点奇怪的,因为s1.rend()所指向的位置是'\0',而'\0'一般又是一个字符串的结尾。我们虽然理解成上述所说,但他的遍历却是跟begin()和end()是一致的,何以见得?

首先我们在这里可以看到,如果直接输出s1.rend(),程序是会崩溃的,但却是可以输出s1.rend()-1,跟s1.end()是一样的。

其次还可以再看一段代码

这边的s1.rbegin()遍历也是跟上面的s1.begin()都是要++才能遍历。

而在这里我们如果给string来加上一个const的话,下面的s1.rbegin()是会报错的,这是因为string和const string是分开的,不能兼容的,如果你定义了一个const string的话,迭代器也应该相应的加上const

那么const迭代器和普通迭代器有什么区别吗。

由于const的性质影响,const迭代器他只具有只读的功能,而普通迭代器是具有可读可写的功能。

2.size,capacity

size是查看当前string的长度大小,而capacity是用来查看当前容量的大小

我们可以看到,s1有11个字符,所以他的size就是11个

那capacity又为什么是15呢?

容量的增容机制是什么呢?

我们可以看到,容量的初始化就是15,第一次的扩容是自身容量的2倍,然后每一次的增容都大约是1.5倍的自身容量。而capacity是包括每个string里面的\0的,因此他会多出来一个位置留给\0来进行存储。

3.reserve

reserve是用来给string开辟空间的,这里看到我欲意开辟100个空间,但是他却给了我111个,这是因为他在每次开辟空间的时候都会多开一点,通常是大于我们所想要开辟的空间的。

4.可以通过[]、at.()来对string进行访问

既然这两个的作用是相似的,那么他们会有什么区别呢?

当访问的数据越界时,用[]访问的话会引发一个叫做断言失败的报错。

而使用at.()的话,会出现一个编译错误

5.append(),+=

这个在python里面是往后面追加内容的意思。在这里的话,他也有好几种用法。

首先可以通过append来对string 进行尾插。跟push_back()的作用是一样的。

然后可以把一个string类型尾插到另一个string类型。

而当我们想要尾插的数据中有空格,我们又不想把空格弄进去,我们还可以这样做

这个比较麻烦一点,那我们不妨可以 使用+=来进行尾插

assign函数会对原有的内容进行覆盖。

6.insert、erase

insert函数可以在某个指定的位置之前插入指定的数据。

这里就是在指针指向0的时候,在0的前面插入数据。

erase函数可以指定删除的部分

这里的意思就是从第一个位置开始删,一共删掉三个数据。

7.replace,find

replace函数顾名思义,就是用来替换字符串中的数据

这里的意思就是,从s1中下标为1的字符开始,到1个字符的位置,换成"x"这个字符

这里的意思就是,从s1中下标为1的字符开始,到2个字符的位置,换成"x"这个字符,但这里的"x"由于只有一个,所以可以是看作把"x"右边的那块往x这里移动,并覆盖掉了一个"l"

而find函数是用来寻找相关的字符的。如果没有找到,就会返回一个string::npos

因此,结合上面的replace,我们可以写一个这样的代码。

简单解释一下,这里就是通过pos来记录s1中空格的位置,由于如果find没有找到空格的话会返回string::npos,因此,当pos!=string::npos,就说明找到了,那就直接使用replace来进行替换。

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

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

相关文章

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] -> 2 / 3 / 4 。 例如,nums [2,3,4],我们将求表达式的值 "…

滑块验证码说明

滑块验证码说明 滑块验证码 旋转验证码 滑动还原验证码 文字点选验证码 快速上手 注意: 如果你项目是使用的Springboot, 请使用SpringBoot脚手架工具tianai-captcha-springboot-starter; 该工具对验证码进行了封装,使其使用更加方便快捷 后端说明 引…

深度学习之基于Matlab Googlenet网络男女性别识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着计算机视觉技术的快速发展,性别识别在多个领域中都展现出了广泛的应用前景&#xff…

【Unity】如何获得TMP Button下的text内容

【背景】 unity项目中使用了TMP命名空间的Button UI组件。脚本中需要获得Button下Text的内容,但是发现用TextMeshPro仍然无法获得button下的text对象。 【分析】 Hierarchy结构上看明确Button下是有Text组件的: 括号里是TMP,所以理论上用TextMeshPro类型去FindComponent…

“A”分考试经验分享:云计算HCIE考试请注意这几点...

大家好,我是誉天云计算HCIE的王同学,于4月2日"A"分通过了云计算3.0 HCIE的认证考试。 首先感谢誉天教育对我的辅导,感谢苗苗老师和石老师对我的帮助,通过这次考试让我对华为云计算有了一定的了解。接下来我就与大家分享…

GOG平台账号注册教程 内附GOG平台官网地址

GOG平台账号注册教程 内附GOG平台官网地址 GOG平台不知道大家听没听说过,该平台也是一款游戏平台,上面还是有着不少的游戏的,尤其是该平台的福利活动特别多,经常会免费发放一些游戏,这个7月份的话就有两款游戏现在是…

聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别

前言 有些小伙伴看到上一篇文章后,可能会发现中间件和我们之前讲的筛选器非常类似,比如它们都是通过 next 串起来的一系列的组件,并且都可以在请求处理前后执行代码,都可以通过不执行 next 来进行请求的终止。那么筛选器和中间件…

400G光模块产品最全分类解析

随着信息技术的迅猛发展,网络带宽需求不断增加,而400G光模块作为当前最热门的光通信技术之一,正在成为新一代网络的关键组成部分。本文将对400G光模块进行最全面的分类解析,以帮助大家深入了解其技术特点和应用场景。 一、ETU-LI…

轻松驾驭teamOS审批流程,权限提升秘诀:teamOS审批功能详解与实战指南

大家在日常办公时,是否有遇到过这样的情况:在进行协作的时候,需要在项目组中发布文档,但当前并没有这个权限。正常走审批流程,可能需要花费一定的时间。 teamOS,一键发起审批流程 在企业的日常运营中&…

FMEA助力智能电网升级:构建安全、高效、可靠的电力网络

随着科技的不断进步,智能电网已成为现代电力行业的重要发展方向。而在这个过程中,FMEA(失效模式和影响分析)作为一种重要的质量管理工具,正日益发挥着其在智能电网建设中的赋能作用。本文将从FMEA的基本概念出发&#…

Java基础(三):Java异常机制以及底层实现原理

🌷一、异常 ☘️1.1 什么是异常 Java异常是程序发生错误的一种处理机制,异常的顶级类是Throwable,Throwable字面意思就是可抛出的,该类是所有的错误和异常的超类,只有Throwable类或者Throwable子类的实例对象才可以被…

缓存菜品操作

一:问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 二:实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: 每个分…

ACWing-186巴士-DFS

题目 原题链接:186. 巴士 - AcWing题库 oj:xmuoj | 最小化蒙德城的旅行者队伍 思路 本题因为n300,说明搜索深度很深,但是测试数量小于17,所以答案一定在比较浅的一个搜索深度中,于是可以利用迭代加深的处理方法迭代…

基于Springboot+Vue的Java项目-旅游网站系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

OpenNJet如何做到让用户永远在线

前言 最近看到了国内开源的一个名为OpenNJet的项目,有一个响亮的口号:“下一代云原生应用引擎”。 一下子就被吸引到了。 先看下官方对OpenNJet的介绍: OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序&…

红黑树(RBTree)认识总结

一、认识红黑树 1.1 什么是红黑树? 红黑树是一种二叉搜索树,与普通搜索树不同的是,在每个节点上增加一个“颜色”变量 —— RED / BLACK 。 通过对各个节点颜色的限制,确保从 根 到 NIL ,没有一条路径会比其他路径长出…

借势母亲节h5小游戏的作用是什么

企业商家往往喜欢借势节日开展营销,母亲节作为5月的重要节日自然不可错过,不同行业商家都有自己开展互动想要实现的效果,如品牌宣传曝光、引流及渠道跳转等。 基于微信社交属性,有利于品牌发展,在【雨科】平台拥有多款…

基于web的物流管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

Backpropagation反向传播算法【总结】

概念介绍 Backpropagation本质上就是一个提升Gradient Descent效率的算法,核心在于其可以有效率地计算出一个偏移量来update下一组未知参数。 难点在于:Neural Network有很多层,而且每层参数都非常多,所以不能立即算出来该组未知…

【Linux网络编程】高级IO——五种IO模型

高级IO 1.什么是IO?什么是高效的IO?2.有那些IO的方式?这么多的方式,有那些是高效的?3.五种IO模型4.高级IO重要概念5.非阻塞IO 点赞👍👍收藏🌟🌟关注💖&#x…