C++(13)——string类

news2024/11/25 10:59:26

string类的由来

C语言中,字符串是以 '\0‘ 结尾的一些字符的集合,为例操作方便,C标准库中提供了一些str 系列的库函数,但是这些库函数与字符串是分开的,不太符合OOP(封装、继承和多态)的思想,而且底层空间需要用户自己管理,稍不留神可能会导致越界访问。

因此,在C++中,为了改变这种情况,大佬们创造了string类。

C++中对于string的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。

在使用string类时,必须包含头文件以及 using namespace std。

string类的常见接口

string类对象的常见构造

上面图片是在cplusplus上面的string类对象的常见构造。我们实现一下。

string类对象的容量操作

size length capacity emply clear

这里主要介绍 size(重点) length capacity empty(重点) clear(重点) reserve(重点) resize(重点)

reserve和resize

接下来,我们看reserve和resize。

reserve是为字符串预留空间。

reserve是为string预留空间,不改变有效元素个数,当reserve的参数小于底层空间大小时,reserve不会改变容量。

resize是将有效字符的个数改成n个,多出的空间用字符填充。

resize在改变元素个数时,如果元素个数增多,可能会改变地城容量大小,如果元素个数减小,底层总空间不变。

string类对象的访问及遍历操作

主要是下面几个:

其中,除了 [] 的运算符重载,剩下的都与迭代器有关。

operate[]

我们先看 [] :

左边是用我们平常的for循环和重载的 [] 来遍历的sl,而右边是范围for遍历的sl。范围for我们后面也还会提到,这里先介绍一下。

begin end rbegin rend

我们重点介绍 begin end rbegin rend

这里先介绍下迭代器。

我们看到上面图片出现了 iterator ,iterator就是迭代器。我们现阶段可以把迭代器理解成类似于指针的东西。

begin和end

看看上面的代码,是不是感觉迭代器和指针有点相似呢。

rbegin和rend

如果我们要从后面到前面,也就是逆着遍历,我们就要用rbegin和rend了,然后迭代器也要换成

reverse_iterator了。注意分别reverse和reserve。

string类对象的修改操作

主要就是上面的几个了。可以将它们分为两类。

一类是: operator+=、append和push_back

还有一类就是:c_str、find、rfind和substr

operator+=、append和push_back

这几个操作符是在string类后面尾插。push_back是尾插字符,append和operator+=都是后面插入字符串。

c_str、find、rfind和substr

c_str是返回C格式字符。

find是从字符串pos开始往后找字符c,然后返回在字符串中的位置。

refind是从字符串pos开始往前找字符c,然后返回在字符串中的位置。

substr是从pos位置开始截取n个字符,然后将其返回。

fopen的第一个参数是const char*类型的,而filename是string类的,所以用c_str返回c格式字符就可以作为fopen的参数了。

结尾

这个就是string类的主要内容了,如果遇到一些其他接口,可以在cplusplus上面查找用法。拜拜

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

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

相关文章

云原生基础知识:容器技术的历史

容器化的定义: 容器化是一种轻量级的虚拟化技术,将应用程序及其所有依赖项(包括运行时、系统工具、系统库等)打包到一个称为容器的单独单元中。容器提供了一种隔离的执行环境,使得应用程序可以在不同的环境中运行&…

splay学习笔记重制版

以前写的学习笔记:传送门 但是之前写的比较杂乱,这里重制一下 问题背景 假设我们要维护一个数据结构,支持插入、删除、查询某个值的排名,查询第 k k k大的值等操作。 最直接的想法是用二叉搜索树,也就是左子树权值&l…

Java | 在消息对话框中显示文本

首先需要导入JOptionPane类,JOptionPane类属于Swing组件中的一种,其导入方式如下: import javax.swing.JOptionPane;可以使用JOptionPane的showMessageDialog方法显示消息文本。 参数格式: JOptionPane.showMessageDialog(paren…

jdk安装,配置path系统变量

直接点击安装 不要包含空格,中文字符 3.找到刚刚的路径,看一下,有东西就说明安装对了 配置path winr输入sysdm.cpl点击确定 全部依次点击 确定 即可。 验证jdk是否安装成功 看java、javac是否可用看java、javac版本号是否无问题 win…

解密程序员的“藏宝图”:我的祖传代码大公开

程序员是如何看待“祖传代码”的? 大家好,我是小明,一位充满好奇心和分享热情的程序员。今天,我要为大家揭开我心中的“藏宝图”——那些我认为值得传世的祖传代码。让我们一同踏上这场奇妙的代码冒险之旅吧! 宝物一…

【广度优先搜索】【堆】【C++算法】407. 接雨水 II

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 本文涉及知识点 广度优先搜索 堆 LeetCoce407. 接雨水 II 给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨…

kerberos学习系列一:原理

1、简介 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。 Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center (即KDC)、Client 和 Service。 优势: 密码无需进行网络传…

Tkinter实现聊天气泡对话框

功能展示: 运行环境: Python: 3.10.4 64-bit 操作系统:win10 64-bit 源码文件列表: 部分代码说明: 调用该接口将消息显示在聊天框中。role参数控制消息显示的位置:0位于对话框左边,1位于右边…

批次大小对ES写入性能影响初探

问题背景 ES使用bulk写入时每批次的大小对性能有什么影响?设置每批次多大为好? 一般来说,在Elasticsearch中,使用bulk API进行批量写入时,每批次的大小对性能有着显著的影响。具体来说,当批量请求的大小增…

LLM(十一)| Claude 3:Anthropic发布最新超越GPT-4大模型

2024年3月4日,Anthropic发布最新多模态大模型:Claude 3系列,共有Haiku、Sonnet和Opus三个版本。 Opus在研究生水平专家推理、基础数学、本科水平专家知识、代码等10个维度,超过OpenAI的GPT-4。 Haiku模型更注重效率,能…

Figma 最新版下载:无需激活码,轻松安装!

从事设计工作,怎么能没有设计工具呢?我相信许多设计师也必须使用Figma这样的软件,真的可以让我们的设计工作更有效率,但我相信你也发现Figma属于外国软件,自然语言也是英语,直到现在没有中文版本&#xff0…

论文解读:Hints for Thin Deep Nets

这篇论文是在Hinton的那篇开山之作《Distilling the Knowledge in a Neural Network》为背景提出来的,主要思想是使用一个宽而浅的教师模型来训练一个窄而深的学生模型。之前的知识蒸馏方法主要是训练教师网络到更浅更宽的网络,没有充分利用深度。而该文…

IntelliJ IDEA 下载安装及配置使用教程

一、IDEA下载 1、打开游览器输入IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 2、点击Download,进入IDEA下载界面 3、 有两个版本,一个是Ultimate 版本为旗舰版,需要付费,包括完整的功能,下载后…

element-ui配置

全局配置 完整引入 Element: import Vue from vue; import Element from element-ui; Vue.use(Element, { size: small, zIndex: 3000 });按需引入 Element Vue.prototype.$ELEMENT { size: small, zIndex: 3000 };如果是vue.config.js中配置了externals 使用按…

设计师成长之路1

. 学习的书籍: 1.写给大家看的设计书 2,设计师要懂心理学 3,平面设计完全手册 4.去日本上设计课2:配色设计原理

【C++】102.二叉树的层序遍历

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例 2&#xff1…

fatal: unable to access ‘***‘: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0解决方案

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文主要介绍在从 GitHub 上克隆 stable-diffusion-webui 项目时出现的 fatal: unable to access https://github.com/AUTOMATIC1111/stable-diffusion-webui.…

报错:module ‘collections‘ has no attribute ‘Iterable‘

使用python 高版本,在使用collections遇到报错:module ‘collections’ has no attribute ‘Iterable’ 查了资料 在python3.9 之后collections.Iterable被弃用了。 添加修改语句 collections.Iterable collections.abc.Iterable

【C++】String常用的函数总结

目录 一、string的构造函数方式: 二、常用的大小/容量相关操作: 三、string的常用修改操作: 四、string的遍历: 五、string的任意位置插入 / 删除: 六:补充: 一、string的构造函数方式&a…

Redis的三种集群模式(图解)

主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能,但是从属节点只提供读取功能。 主从复制的数据同步过程如下: (1)首先主节点启动,然后从属节点启动,从属节点会连接主节点并发送SYNC命令以…