C++中string类的初步介绍

C语言中的字符串

在C语言中,字符串是以'\0'结尾的一些字符的集合,C标准库中提供了一系列str系列的库函数,但这些库函数与字符串是分离的,不符合面向对象的编程思想。

string类的大致介绍

1.string是表示字符串的字符串类

2.string类的接口与常规容器的接口基本相同,又添加了一些专门用来操作string的常规操作

3.string在底层实际是basic_string模板类的别名

    typedef basic_string <char,char_traits,allocator> string

4.不能操作多字节或者变长字符的序列

string类对象的常见构造

1.string()

        构造空的string类对象,即空的字符串

2.string(const char*s)

        用c-string来构造string类对象

3.string(size_t n, char c)

        string类对象中包含n个字符c

4.string(const string&s)

        拷贝构造函数

string类对象的容量操作

1.size

        返回字符串有效字符长度

2.length

        返回字符串有效字符长度

3.capacity

        返回空间总大小

4.empty

        检测字符串是否为空串,若是返回true,若不是返回false

5.clear

        清空有效字符

6.reserve

        为字符串预留空间

7.resize

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

注意:

->size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()

->clear()只是将string中有效字符清空,不改变底层空间大小

->resize(size_t n)与resize(size_t n, char c)都是将字符串中有效个数改变到n个,不同的是,当字符个数增多时,resize(n)用0来填充多出的元素空间,resize(n,c)用字符c来填充多出的元素空间。

(resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变)

->reserve(size_t res_arg=0),为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserve不会改变容量大小

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

1.operator[]

        返回pos位置的字符,const string类对象调用

2.begin,end

        begin获取第一个字符的迭代器,end获取最后一个字符下一个位置的迭代器

3.rebegin,rend

        rebegin获取最后一个字符的迭代器,rend获取第一个字符前一个位置的迭代器

string类对象的修改操作

1.push_back

        在字符串后尾插字符c

2.append

        在字符串后追加一个字符串

3.operator+=

        在字符串后追加字符串str

4.c_str

        返回c格式字符串

5.find+npos

        从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置

6.rfind

        从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

7.substr

        在str中从pos位置开始,截取n个字符,然后将其返回

注意:

->在string尾部追加字符时,s.push_back(c)/s.append(1,c)/s+='c' 三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串

->对string操作时,如果能够预估到大概放多少字符,可以先通过reserve把空间预留好

string类非成员函数

1.operator+

        尽量少用,因为传值传值返回,导致深拷贝效率低

2.operator>>

        输入运算符重载

3.operator<<

        输出运算符重载

4.getline

        获取一行字符串

5.relational operators

        大小比较

vs与g++下string结果的说明

1.vs下string的结构

string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体中用来定义字符串中的储存空间

->当字符串长度小于16时,使用内部固定的字符数组来存放

->当字符串长度大于等于16时,从堆上开辟空间

有一个size_t 字段保存字符串长度,有一个size_t 字段保存从堆上开辟空间总的容量

还有一个指针做一些其他的事情

2.g++下string的结构

g++下,string是通过写时拷贝实现的,string对象总共占4个字节,内部只包含了一个指针,该指针将来指向一块空间,内部包含了如下字段

->空间总大小

->字符串有效长度

->引用计数

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

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

相关文章

GpuMall智算云:meta-llama/llama3/Llama3-8B-Instruct-WebUI

LLaMA 模型的第三代&#xff0c;是 LLaMA 2 的一个更大和更强的版本。LLaMA 3 拥有 35 亿个参数&#xff0c;训练在更大的文本数据集上GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Llama 3 的推出标志着 Meta 基于 Llama 2 架构推出了四个新…

pycharm画图猫和老鼠

在PyCharm中&#xff0c;你可以使用turtle模块来画图。以下是一个简单的例子&#xff0c;展示如何使用turtle模块来绘制一个猫和一个老鼠。 import turtle # 设置窗口标题 turtle.title("画图猫和老鼠") # 创建两个turtle对象&#xff0c;一个用于绘制猫&#xf…

AWS联网和内容分发之API Gateway

Amazon API Gateway是一种完全托管的服务&#xff0c;可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的API。API充当应用程序的前门&#xff0c;可从您的后端服务访问数据、业务逻辑或功能。使用API Gateway&#xff0c;您可以创建RESTful API和WebSocket API&…

lightGBM 集成学习模型 - 以银行风控业务为例

LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是基于梯度提升决策树&#xff08;GBDT&#xff09;的一种改进实现。其核心思想是通过加法模型&#xff08;additive model&#xff09;和前向分布算法&#xff08;forward distribution algorithm&#xff09…

Qt pro工程文件编写汇总(区分debug和release、32位和64位的方法,编译输出目录等)

前言&#xff1a; 从事qt开发已经好几年了&#xff0c;但有关pro编写的一些细节问题一直没有一个很好的梳理汇总——因为实际工作开发中&#xff0c;往往只需要编译特定版本的软件&#xff08;例如32位release版本&#xff09;&#xff0c;项目创建好后并设置好编译路径&#x…

ML307R OpenCPU GPIO使用

一、GPIO使用流程图 二、函数介绍 三、GPIO 点亮LED 四、代码下载地址 一、GPIO使用流程图 这个图是官网找到的&#xff0c;ML307R GPIO引脚电平默认为1.8V&#xff0c;需注意和外部电路的电平匹配&#xff0c;具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描…

零基础PHP入门(一)选择IDE和配置环境

配置环境 官网下载安装包&#xff0c;windows https://windows.php.net/download#php-8.3 我是下载的最新版&#xff0c;也可以切换其他版本 https://windows.php.net/downloads/releases/archives/ 下载好压缩文件后&#xff0c;双击解压到一个目录 D:\soft\php 复制ph…

成都爱尔眼科医院《中、欧国际近视手术大数据白皮书2.0》解读会圆满举行

2024年5月12日&#xff0c;爱尔眼科联合中国健康促进基金会健康传播与促进专项基金、新华社新媒体中心与中南大学爱尔眼科研究院、爱尔数字眼科研究所重磅发布《中、欧国际近视手术大数据白皮书2.0》。这是继2021、2022年在国内相继发布《国人近视手术白皮书》、《2022中、欧近…

Ubuntu系统初始化相关配置

目录 Ubuntu文件传输: ubuntu怎么打开word:安装wps(应用中心搜索) Ubuntu安装annoconda

模型蒸馏笔记

文章目录 一、什么是模型蒸馏二、如何蒸馏三、实践四、参考文献 一、什么是模型蒸馏 Hinton在NIPS2014提出了知识蒸馏&#xff08;Knowledge Distillation&#xff09;的概念&#xff0c;旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f33c;前言 &#x1f512;单机环境下防止接口重复提交 &#x1f4d5;导入依赖 &#x1f4c2;项目结构 &#x1f680;创建自定义注解 ✈创建AOP切面 &#x1f697;创建Conotroller &#x1f4bb;分布…

构建高效的在线培训机构CRM应用架构实践

在当今数字化时代&#xff0c;在线培训已成为教育行业的重要趋势之一。为了提供更好的学习体验和管理服务&#xff0c;在线培训机构需要构建高效的CRM&#xff08;Customer Relationship Management&#xff09;应用架构。本文将探讨在线培训机构CRM应用架构的设计与实践。 一、…

PTA 6-3 入侵者围剿第二关3情报解密

经过上一步已经将2个分队得到的秘密情报合并到一起&#xff0c;并进行了信息去重。接下来&#xff0c;经过情报的分析&#xff0c;发现情报进行加密的方式&#xff0c;将链表从正中间断开&#xff0c;然后后面的链表全部接到前面&#xff0c;输出来的次序就是敌方的武器发射次序…

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

在vps的centos系统中用Python和青龙检测网页更新

环境&#xff1a;vps&#xff0c;centos7&#xff0c;python3.8.10&#xff0c;青龙面板&#xff08;用宝塔安装&#xff09; 任务&#xff1a;用python代码&#xff0c;监控一个网站页面是否有更新&#xff08;新帖子&#xff09;&#xff0c;若有&#xff0c;则提醒&#xf…

【数据结构】二叉树的认识与实现

目录 二叉树的概念&#xff1a; 二叉树的应用与实现&#xff1a; 二叉树实现接口&#xff1a; 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 二叉树节点个数​编辑 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点​编辑 二叉树前序遍…

XSS+CSRF攻击

一、前言 在DVWA靶场的XSS攻击下结合CSRF攻击完成修改密码 也就是在具有XSS漏洞的情况下实施CSRF攻击 二、实验 环境配置与上一篇博客一致&#xff0c;有兴趣可以参考CSRF跨站请求伪造实战-CSDN博客 首先登录DVWA&#xff0c;打开XSS模块 name随便输入&#xff0c;message…

嵌入式0基础开始学习 Ⅲ Linux基础(1)Linux基本命令

1.APT unbuntu中功能最强大的命令行软件包管理工具&#xff0c; 用来获取&#xff0c;安装&#xff0c;编译&#xff0c;卸载&#xff0c;查询软件包。 工作原理; /etc/apt/sources.list -> 文件 用来指针ubuntu的软件源服务器…

HQL面试题练习 —— 合并数据

题目来源&#xff1a;京东 目录 1 题目2 建表语句3 题解 1 题目 已知有数据 A 如下&#xff0c;请分别根据 A 生成 B 和 C。 数据A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中&#xff0c;申请权限的步骤有些繁琐&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数&#xff0c;今天就借助 ActivityResultLauncher 来简化书写。 步骤1&#xff1a;创…