C++~~string模拟实现(3)

news2024/11/13 21:33:41

目录

1.传统写法和现代写法

2.对于流提取的优化

3.简单机制了解

4.string类的几个构造函数总结

4.1基本用法

4.2两个赋值方式

4.3拷贝构造

4.4获取字符

4.5一个容易混淆的对比

4.6创建对象


1.传统写法和现代写法

(1)上面的代码里面的左边部分是现代的拷贝和赋值的写法,右边是完全我们自己实现的,这两者仅仅在代码的简洁度上面有所区别,其他的大体相同;

(2)现代的写法里面,我们使用的初始化列表进行初始化,调用swap函数进行这个交换同样也是可以达到这个拷贝构造的目的,实际上这个temp就是s3的拷贝,想要达到的效果就是s2和s3一样,这个swap实际上就是s2这个对象调用的;

(3)赋值函数的现代写法就更加简洁了,因为我们在进行赋值的时候,主要考虑的问题就是原来空间的释放问题,我们把原来的空间数据拷贝给s2之后,原来的空间要被释放掉,这个时候的temp也会因为执行析构函数达到空间释放的目的;

2.对于流提取的优化

(1)我们之前对于流提取,就是满了就开空间,不满的话就会一直向这个里面填充数据,满的话需要进行自动的扩容,但是我们优化的话,就会尽量减少这个扩容的空间;

(2)我们使用的方法就是定义一个数组buffer,先把这个数据存到buffer里面去,然后满了128之后再加到我们自己定义的形参s里面去,如果我们输入的字符串很长,就会128,128的往里面添加(每次满128之后就会把这个循环变量i重新置为0),如果我们输入的字符串很短,就会直接添加到buffer,然后加到s里面去; 

(3)这样做的好处就是我们可以尽量减少这个capacity的大小,不是像之前那样二倍二倍的进行扩容;

3.简单机制了解

(1)就是浅拷贝的问题我们可以使用深拷贝的方式进行解决,但是如果我们不想开辟新的空间,就可以使用这个引用计数的方式进行解决,就是当浅拷贝,一个空间被多个指针指向的时候,我们就是用一个具体的数字进行计数,当这个引用计数的数字是0的时候,我们再把这个空间给释放掉 

(2)另外一个浅拷贝的问题就是一个空间有多个指针指向,我们对于某个数据进行修改的时候,就会影响另外一个指向这个空间的指针变量,这个时候我们就可以使用写时拷贝技术,当我们需要对于这个数据进行修改的时候,我们再去进行深拷贝,这样的话就相当于延迟拷贝,需要时候我们再去执行深拷贝;

4.string类的几个构造函数总结

4.1基本用法

4.2两个赋值方式

下面的两个方式都是等效的,都是相当于对于这个字符串进行初始化赋值操作;

4.3拷贝构造

C++里面的string容器的拷贝构造都是深拷贝的,就是这个不在一块内存区域上面;

4.4获取字符

如果第二个参数比我们的字符串的长度小,我们就会截取指定长度的字符;

但是如果我们的长度比这个字符串更长,我们就会截取字符串全部内容,包括一些内存里面的随机存放的内容,他是不会达到这个斜杠0就自动停止的;

4.5一个容易混淆的对比

s3就是上面的实例里面的hello world字符串,3,3就是表示的从第三个下标位置开始,读取三个字符的内容;

s9是只给出来了第二个参数,我们这个时候就会直接读取到斜杠0才结束,并不会向上面的一样读取后面的随机内容;

但是如果我们把这个s3换为正式的字符串内容,我们感觉这个好像并没有影响,实际上这个输出的结果还是有一些差别的;

对于这个s11的内容,会按照上面的4.4里面的构造函数打印输出的,因为这个参数和4.4里面的构造函数更加接近;

4.6创建对象

这个构造函数里面是有两个参数,表示创建n个x字符的对象,n就是第一个参数,x就是我们创建的对象里面的字符;

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

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

相关文章

排序---归并排序

归并排序 一、定义二、实现原理三、代码实现 一、定义 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有…

ES中聚合查询之date_histogram查询出现key_as_string 和 key含义

ES中聚合查询之date_histogram查询出现key_as_string 和 key含义 DSL语句 #实例 GET /capture_features_202407/_search {"query": {"bool": {"must": [{"terms": {"plateNo": ["汉A00001"]}},{"range&quo…

【C++】——初识模版

文章目录 前言函数模版函数模版的原理函数模版的实例化 类模版类模版的实例化 前言 当我们使用一个通用的函数: //为每一个类型都编写一个重载版本 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& …

Java实现七大排序(一)

目录 一.插入排序 1.直接插入排序 2.希尔排序 二.选择排序 1.选择排序 2.堆排序 三.总结 一.插入排序 1.直接插入排序 直接插入排序的原理与线下玩扑克牌类似。我们拿到一张牌后要排序,方法就是一张一张对。直接插入排序也是这样的,我们得到一张…

融云 2024 ChinaJoy | 你有一个必逛的展位 @W4 馆 B786

惊喜闪现👇 打开抖音搜索【融云】 关注融云官抖,可到展位领取好礼一份 更有惊喜内容不定时掉落~

【CTFWP】ctfshow-web32

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 题目介绍&#xff1a;题目分析&#xff1a;payload&#xff1a;payload解释&#xff1a;flag 题目介绍&#xff1a; <?php/* # -*- coding: utf-8 -*- # Autho…

昇思25天学习打卡营第23天|ShuffleNet图像分类

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

誉天Cloud Service Solutions Architect(云服务)怎么样

誉天云服务课程亮点 深度融合云原生 包含原生K8s和docker内容&#xff0c;引入isito和ASM功能进行微服务治理&#xff0c;结合Linux功底设计云上性能优化&#xff0c;和架构设计。师资力量强大 课程由两名5HCIE认证讲师授课&#xff0c;认证辅导由已通过HCIE-Cloud Service专职…

【数据结构】探索排序的奥秘

若有不懂地方&#xff0c;可查阅我之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~_csdn博客 所属专栏&#xff1a;数据结构_专栏 目录 排序的概念 几种排序方法介绍 冒泡排序 选择排序 插入排序 堆排序 向上调整建堆排序 向下调整建堆排序 希尔排序 快速…

【数学建模】——前沿图与网络模型:新时代算法解析与应用

目录 1.图与网络的基本概念 1. 无向图和有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与图的连通性 2.图的矩阵表示 1. 关联矩阵 2. 邻接矩阵 3.最短路问题 1.Dijkstra 算法 2.Floyd 算法 4.最小生成树问题 1.Kruskal 算法 2.Prim 算法 5.着色问题 6.…

【AI大模型】程序员AI的未来——Copilot还是Claude3.5 Sonnet?

近期&#xff0c;Anthropic发布了Claude 3.5 的“大杯”模型 —— Claude 3.5 Sonnet&#xff01; 这次发布的 Sonnet 代表意大利的“十四行诗”&#xff0c;结构复杂&#xff0c;在智能水平、功能多样性和处理能力上都有所提升&#xff0c;能够应对更复杂的认知任务&#xff…

进程与进程函数

目录 进程与程序 1.1进程是什么 1.2程序&#xff0c;进程之间的关系 1.3进程的生存环境 1.4进程的状态转换 1.5关于内核层与用户层 1.6保存和恢复处理器现场 进程原语 2.1fork() ​编辑 2.1.1父子进程的继承 2.1.2父子进程共享fork()栈帧 2.1.3打印进程id和父进程i…

【OpenREALM学习笔记:14】单目视觉SLAM方法在UAV影像上重建三维地形的思考

最近在学习SLAM技术与测绘三维影像重建的相关知识&#xff0c;结合自己的感受&#xff0c;撰写一下对于单目视觉SLAM利用无人机影像重建三维地形的一些看法。 1. 单目视觉SLAM系统在三维地形重建中所面临的挑战有哪些&#xff1f; 单目视觉SLAM众所周知的一个问题是&#xff…

C# 委托函数 delegate

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;是一种特殊的类型&#xff0c;它可以持有对方法的引用。 委托是实现事件的基础。事件本质上是多播委托&#xff0c;允许多个方法被触发 委托允许你将方法作为参数传递给其他方法&#xff0c;或者将方法作为返回值从方法…

feed流(投喂)

1、拉模式&#xff1a; 优缺点&#xff1a;节省空间&#xff0c;只存一份&#xff0c;赵六在需要的时候直接去读。延迟高&#xff0c;耗时长。如果关注的人多的话&#xff0c;就会一次性拉取的很大&#xff0c;造成拥塞。 2、推模式 优缺点&#xff1a;延迟低&#xff0c;耗时少…

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…

内存卡损坏读不出怎么修复?内存卡数据恢复的7个方法请收好!

当面对内存卡损坏、无法读取数据的困扰时&#xff0c;许多人会感到焦虑和困惑。尤其是当这些卡中存储着珍贵的照片、视频或文件时&#xff0c;这种困扰更显得令人不安。您是否也曾因内存卡损坏而无法显示照片或遭遇需要格式化的提示而感到困扰&#xff1f;在我们日常的生活中&a…

power bi文本,截取及查找函数

power bi文本,截取及查找函数 1. 文本函数1.concatenate函数2. exact 函数3. find函数4. search函数 2. 截取函数1. fixed 函数2. 大小写转换3. trim函数4.rept函数5. replace 函数6. substitute函数 3. 查找匹配函数1 contains函数2. treatas 函数3. ContainsString函数4. Con…

GPT模型为什么能生成有意义的文本

GPT模型的底层&#xff0c;其实是谷歌团队推出的Transformer模型。但是在GPT-3出现之前&#xff0c;大家一直对它没有多少了解。直到它的参数数量突破1750亿个的时候&#xff0c;它才建立起一个庞大的神经网络&#xff0c;这个神经网络最突出的特点是大数据、大模型和大计算。其…

宠物经济纵深观察:口红效应显著,呈可持续发展态势

七月以来&#xff0c;全国各地陆续开启高温模式。和人一样&#xff0c;“毛孩子们”同样也难耐高温&#xff0c;由此&#xff0c;围绕猫猫狗狗的“宠物经济”迅速升温&#xff0c;宠物冰垫、宠物饮水机、宠物烘干机......一系列宠物单品掀起夏日消费热潮。 就在几天前&#xf…