有关string的部分接口

news2024/11/25 20:19:13

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.coloradmin.cn/o/1648855.html

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

相关文章

「新媒体营销必备」短链接生成,让你的内容更易传播!

在信息大爆炸的今天,无论是企业还是个人都需要有一个快速有效的方式让信息传播。而短链接生成的出现,为我们带来了极大的便利。 C1N短网址(c1n.cn)是一家致力于为用户提供快速、安全的短链接服务的公司。作为专注于短链接的品牌&…

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址:Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址: 链…

阿里云国际服(alibabacloud)介绍、注册、购买教程?

一、什么是阿里云国际版? 阿里云分为国内版和国际版。国内版仅面向中国大陆客户,国际版面向全球客户。 二、国际版与国内版有何异同? 1)异:除了目标客户不同,运营主体不同,所需遵守的法律与政…

暗区突围pc端下载教程 暗区突围pc端怎么下载

暗区突围pc端下载教程 暗区突围pc端怎么下载 《暗区突围》是一款刺激的第一人称射击游戏。目前pc版本要上线了,即将在5月正式上线。在这款游戏里,我们会在随机的时间、地点,拿着不一定的装备,跟其他玩家拼个高低,还需…

(十六)Servlet教程——Servlet文件下载

Servlet文件下载 文件下载是将服务器上的资源下载到本地,可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载,第二种是通过代码来下载。 超链接下载 在HTML或者JSP页面中使用超链接时,可以实现页面之间的跳转,但是…

开发环境虚拟环境学习记录

1、VS Code搭建python环境 下载好Visual Studio Code后,首先需要进入Visual Studio Code并安装支持python开发的插件: 2、虚拟环境 2.1、初识虚拟环境 概述:①、在使用Python语言的时候我们使用pip来安装第三方包,但是由于pip的…

Leetcode—138. 随机链表的复制【中等】

2024每日刷题(129) Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

Linux动态库与静态库解析

文章目录 一、引言二、C/C源文件的编译过程三、静态库1、静态库的定义和原理2、静态库的优缺点3、静态库的创建和使用a、创建静态库b、使用静态库 四、动态库1、动态库的定义和原理2、动态库的优缺点3、动态库的创建和使用示例a、创建动态库b、使用动态库 五、动静态库的比较 一…

【Python小技巧】matplotlib不显示图像竟是numpy惹的祸

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、问题:df.plot() 显示不出图像二、尝试各种解决办法1. 增加matplotlib.use,设定GUI2. 升级matplotlib版本 三、numpy是个重要的库1. …

详解MySQL常用的数据类型

前言 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型,包括数值类型、字符…

算法分析 KMP算法中next值的计算、0/1背包问题

5.6.1 KMP算法中next值的计算 设模式的长度为m。用蛮力法求解 KMP算法中的 next值时&#xff0c;next[0]可直接给出&#xff0c;计算next[j](1<j<m-1)则需要在 T[0] …T[j-1]中分别取长度为j-1、..、2、1的真前缀和真后缀并比较是否相等&#xff0c;最坏情况下的时间代价…

2024------MySQL数据库基础知识点总结

-- 最好的选择不是最明智的&#xff0c;而是最勇敢的&#xff0c;最能体现我们真实意愿的选择。 MySQL数据库基础知识点总结 一、概念 数据库&#xff1a;DataBase&#xff0c;简称DB。按照一定格式存储数据的一些文件的组合顾名思义: 存储数据的仓库&#xff0c;实际上就是一…

Java初识继承

继承 文章目录 继承为什么需要继承继承中变量的访问特点继承中方法的访问特点继承的优缺点 概念:在Java中&#xff0c;继承是面向对象编程的一个基本特性。它允许我们定义一个新类&#xff0c;它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类&#xff0c;新…

Linux进程——Linux进程与进程优先级

前言&#xff1a;在上一篇了解完一部分常见的进程状态后&#xff0c;我们先来把剩下的进程状态了解一下&#xff0c;再来进入进程优先级的学习&#xff01; 如果对前面Linux进程不太熟悉可以先阅读&#xff1a; Linux进程 本篇主要内容&#xff1a; 僵尸进程和孤儿进程 Linux进…

63-HDMI转VGA电路设计

视频链接 HDMI转VGA电路设计01_哔哩哔哩_bilibili HDMI转VGA电路设计 HDMI电路设计&#xff08;参考第13课&#xff09; VGA电路设计&#xff08;参考第15课&#xff09; DP转VGA电路设计&#xff08;参考第75课&#xff09; 1、HDMI转VGA转换器 2、HDMI转VGA简介 1、解…

融知财经:期货风险有多大,期货风险进行控制的方法

期货价格变化远大于股票市场&#xff0c;其风险也大于股票市场&#xff0c;当然其预期收益机会相对较高&#xff0c;因此期货更适合激进型投资者。在期货投资市场中&#xff0c;除了市场外的常见风险外&#xff0c;转型期投资者的投机心理和杠杆效应会增加期货的交易风险&#…

获取波形极值与间距并显示

获取并显示波形的极值与极值间距 1、流程 1、通过signal.find_peaks获取极大值 2、获取极大值下标 3、获取极大值对应的值 4、获取极大值的下标间距(就是隔多远有一个极大值) 5、获取极大值间距的标准差、方差、均值、最大值 6、图形展示波形图并标记极大值2、效果图 3、示…

铜价飙升,慧能泰HUSB332F带你狂飙

铜价&#xff0c;近期涨的很飘&#xff0c;涨到怀疑人生。继黄金后&#xff0c;铜成了另一个疯涨的明星&#xff01;作为电线电缆生产不可或缺的原材料&#xff0c;铜的身价暴涨直接拉响了成本警报&#xff0c;压缩了企业的利润空间。众多电线电缆制造商面临着严峻的挑战与考验…

嵌入式学习<1>:建立工程、GPIO

嵌入式学习_part1 本部分笔记用于学习记录&#xff0c;笔记源头 >>b站江科大_STM32入门教程 建立工程、GPIO 开发环境&#xff1a;keil MDK、STM32F103C8T6 1 &#xff09;建立工程 &#xff08;1&#xff09;基于寄存器开发、基于标准库 或者 基于HAL库开发; &…

【Python】字典题

题目&#xff1a;输入一段文本&#xff0c;统计每个字符的个数 in_inputinput(“输入&#xff1a;”) dic{} for char in in_input: if char in dic: dic[char]1 # 字典添加键值对的方法&#xff0c;给字典给键和值的方法 else: dic[char]1 print(dic) for key,value in dic.i…