【C++】string(一)

大家好,我是苏貝,本篇博客带大家了解C++的string类,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • 1. 标准库中的string类
    • 1.1 string类(了解)
    • 1.2 string类的常用接口说明
      • (A) string类对象的常见构造函数
        • a.string()
        • b.string(const char* s)
        • c.string(const string& str)
      • (B) 迭代器iterators
        • a. begin/end
        • b.rbegin/rend
        • c.cbegin/cend/crbegin/crend
      • (C) 容量capacity
        • a.size/length
        • b.max_size(了解)
        • c.capacity
        • d.resize
        • e.reserve
        • f.clear
        • g.empty
        • h.shrink_to_fit

1. 标准库中的string类

1.1 string类(了解)

  1. 字符串是表示字符序列的类
  2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
  5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

总结:

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string string;
  4. 不能操作多字节或者变长字符的序列。

在使用string类时,必须包含#include以及using namespace std;

1.2 string类的常用接口说明

在下面链接中有string类的所有接口信息,但我们后面只了解常用的接口
string

(A) string类对象的常见构造函数

在这里插入图片描述

我们只了解上图的(1)(2)(4),其它的根据上图的解释也能看懂

a.string()

在这里插入图片描述

这是空参构造,也是默认构造
作用:构造一个空的string对象,对象的长度是0
在这里插入图片描述

上图中可以使用cout<<s的原因是string实现了<<运算符重载

b.string(const char* s)

在这里插入图片描述

复制由 s 指向的以 null 结尾的字符序列(C 字符串)。
这里的C字符串是指末尾有“\0”的字符串,如字符数组,”aaa”,const char* p=”aa”

在这里插入图片描述

c.string(const string& str)

在这里插入图片描述

拷贝构造

在这里插入图片描述

(B) 迭代器iterators

在这里插入图片描述

迭代器是一个行为像指针的类型对象,但不是指针。用typeid来证明迭代器不是指针
在这里插入图片描述

a. begin/end

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

成员函数begin()的返回值是指向string的第一个字符的迭代器。成员函数end()的返回值是指向string的最后一个字符的下一个字符的迭代器。

string的字符串底层一定有表结束的’\0’,因为string的底层就是用C语言的字符数组实现的,C语言的字符串用’\0’作为结束标志。但是我们认为string的最后一个字符是’\0’的前一个字符,因此end()返回的迭代器一般都指向’\0’

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

它们通常配合遍历操作使用

如果s没有被const修饰,那么可以通过迭代器修改string

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

begin()和end()也可以用const修饰,如果有const string,那么该string不能被修改,且const string调用begin()/end()时,返回值类型是const_iterator

在这里插入图片描述

b.rbegin/rend

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

rbegin()的返回值是指向string的最后一个字符的反向迭代器。rend()的返回值是指向string的第一个字符的前一个字符的反向迭代器。
在这里插入图片描述

注意:反向遍历时,rid还是++而不是–

在这里插入图片描述

因此一共有4类迭代器

在这里插入图片描述

c.cbegin/cend/crbegin/crend

这四个成员函数都是C++11新增的,其实它们和const修饰的begin/end/rbegin/rend是一样的

在这里插入图片描述

在这里插入图片描述

© 容量capacity

在这里插入图片描述

a.size/length

size()和length()的返回值相同,都是返回string的长度。
注意:它们都不算’\0’

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

我们一般都用size

b.max_size(了解)

在这里插入图片描述

返回string最大可到的长度
在这里插入图片描述

最大值是不固定的,可能在某些编译器的某些平台下会是42亿多

c.capacity

在这里插入图片描述

返回的是开辟的空间,capacity>=size

在这里插入图片描述

d.resize

在这里插入图片描述

修改string的长度为n

resize()有3种情况:

  1. n<size:删除

  2. size<n<capacity:插入

  3. n>capacity:扩容+插入

  4. n<size,string的长度变为n,删除n之后的数据

在这里插入图片描述

  1. size<n<capacity,string的长度变为n,size以后的元素初始化为形参c,如果没有传形参c,就初始化为’\0’

传参
在这里插入图片描述

没传参

在这里插入图片描述

  1. n>capacity,扩容+插入

传参:
在这里插入图片描述

不传参

在这里插入图片描述

注意:resize用的不多

e.reserve

在这里插入图片描述

作用:请求改变capacity。当n>capacity时,扩容,使得capacity>=n。当n<capacity时,不做处理

reserve和反向迭代器的reverse相似,前者是保留,后者是反转
在这里插入图片描述

在这里插入图片描述

reserve()一般用于知道要插入多少数据,提前开好空间的情况。它避免了扩容,提高效率。相较于resize,reservs用的更多

f.clear

在这里插入图片描述

作用:清空string,即删除string的内容,让size==0。但不会销毁空间

在这里插入图片描述

g.empty

在这里插入图片描述

作用:测试string是否是空的,即测试string的size是否为0

在这里插入图片描述

h.shrink_to_fit

在这里插入图片描述

作用:请求缩容,但是缩容后的capacity还是要>=size

但是编译器不一定真的会缩容

在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

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

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

相关文章

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具&#xff0c;它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则&#xff0c;QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下&#xff0c;记录和管理车险保单信息是一项必不可少的任务。然而&#xff0c;面对数量庞大的电子保单&#xff0c;传统的手工录入方式显得尤为低效——它不仅消耗大量时间&#xff0c;而且容易出现错误&#xff0c;这不仅影响了用户的满意度&#xf…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面&#xff0c;提高在搜索引擎结果页面上的排名&#xff0c;从而获得更多的自然流量。有效的SEO策略能够让您在激…

【go从零单排】JSON序列化和反序列化

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域&#xff0c;元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心&#xff0c;他认为开放元宇宙将融合娱乐、游戏和科技产业&#xff0c;带来一个光明的未来。本文将深入探讨采访中的关键内容&#xff0c;分析元宇宙的…

QT自定义控件封装

QT自定义控件封装 1.概述 这篇文章介绍如何创建UI文件&#xff0c;通过自定义方式将两个控件联动起来&#xff0c;实现自定义功能。 2.创建UI文件 新建一个widget的普通项目&#xff0c;然后在项目名称上右键选择And New... 新建文件&#xff0c;然后选择QT 再选择Qt Desig…

王鹤棣演唱会即将泰国开唱,从原点走向未来,兑现与粉丝之约

对喜爱王鹤棣的粉丝来说&#xff0c;12月28日注定是个令人激动的日子&#xff0c;因为这天&#xff0c;王鹤棣即将在泰国曼谷举办D.Party演唱会&#xff0c;这一消息一经官宣&#xff0c;便引发大量中国以及东南亚地区粉丝欢呼&#xff0c;大家对王鹤棣此次演唱会表现出超常热情…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

<项目代码>YOLOv7 草莓叶片病害识别<目标检测>

YOLOv7是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv7具有更高的…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

android studio 轮询修改对象属性(修改多个textview的text)

android studio版本&#xff1a;23.3.1 例程名称&#xff1a;loopsettextviewtext 这几天在帮一个朋友做个数独小游戏&#xff0c;如下图&#xff1a; 要可以玩自定义游戏&#xff0c;点击清空后&#xff0c;所以数字要清除。 要把所有的内容清空&#xff0c;一共有81个text…

Linux(CentOS)项目总结(前后端分离)

项目情况&#xff1a; 前端开发&#xff1a;vue3 vite ts VSCode后端开发&#xff1a;JDK17 Spring Boot 3 Mybatis Maven IDEA数据库&#xff1a;MySQL8.4.3 SQLyog代码管理&#xff1a;Git虚拟环境&#xff1a;VMware远程登录&#xff1a;FinalShell服务器操作系统&…

C# 选择文件夹路径

通过C#代码&#xff0c;调出windows风格的文件夹选择框。提供界面来选择指定文件夹&#xff0c;并将文件夹完整路径以字符串形式返回。 示例&#xff1a; 代码&#xff1a; #region 选择指定文件夹 string folderPath ""; FolderBrowserDialog folderBrowserDialo…

unity3d————协程原理讲解

1.协程的本质 协程可以分成两部分1.协程函数本体 2.协程调度器 协程本体就是一个能够中间暂停返回的函数 协程调度器是Unity内部实现的&#xff0c;会在对应的时机帮助我们继续执行协程函数 Unity只实现了协程调度部分协程的本体本质上就是一个 C#的迭代器方法 2.协程本体是…

丹摩征文活动|CogVideoX-2b:从0到1,轻松完成安装与部署!

丹摩征文活动 | CogVideoX-2b&#xff1a;从0到1&#xff0c;轻松完成安装与部署&#xff01; CogVideoX 介绍 CogVideoX的问世&#xff0c;标志着视频制作技术迈入了一个全新的时代。它不仅打破了传统视频制作在效率与质量之间的平衡难题&#xff0c;还通过其先进的3D变分自…

知识库搭建|员工培训的效率利器

在企业的快速发展过程中&#xff0c;知识库的搭建成为了提升员工培训效率的关键一环。一个高效的知识库不仅能够为员工提供便捷的学习资源&#xff0c;还能促进知识的持续积累和传承。本文将探讨如何借助知识库工具&#xff0c;来提升员工培训的效率。 一、知识库在员工培训中…

OneRestore: A Universal Restoration Framework for Composite Degradation 论文阅读笔记

这是武汉大学一作单位的一篇发表在ECCV2024上的论文&#xff0c;文章代码开源&#xff0c;文章首页图如下所示&#xff0c;做混合图像干扰去除&#xff0c;还能分别去除&#xff0c;看起来很牛逼。文章是少见的做混合图像干扰去除的&#xff0c;不过可惜只包含了3种degradation…

2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解

目录 一、监听对象的操作二、Proxy基本使用2.1 创建空代理2.2 定义捕获器2.2.1 Proxy的set和get捕获器2.2.2 Proxy(handler)的13个捕获器 三、Reflect的作用3.1 Reflect的使用3.2 Reflect其余方法(9个)3.3 Proxy与Reflect中的receiver参数3.4 Reflect中的construct方法 ECMAScr…

文献解读-DNAscope: High accuracy small variant calling using machine learning

关键词&#xff1a;基准与方法研究&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;DNAscope: High accuracy small variant calling using machine learning标题&#xff08;中文&#xff09;&#xff1a;DNAsc…