初识c++:string类(2)

#本节主要讲解c++:string类的模拟实现

全部代码的实现在最后面!!!有需要的自己往下滑,自取!!!

1.string类的模拟实现

2.浅拷贝

3.深拷贝

目录

#本节主要讲解c++:string类的模拟实现

1.string类的模拟实现

2.浅拷贝

3.深拷贝


1.string类的模拟实现

现在我们将开始对string类的全方位刨析:

(1)构造函数,是肯定要写的,这里就不多提(如果不知道为什么,请看作者前几篇整理的博客,进行相关的了解),构造函数肯定是要创建一点的空间大小,利用new来创建容量。

我们可以很明显的看到下图构造函数给了一个缺省值,就是当什么都不给的时候,也就是单纯创建对象时,自动调用构造函数。

(当然在我们创建空间的时候,+1,是为了给'\0'一个空间的位置)

第二种呢是一种拷贝构造,就如下图注释一样的用法,(深拷贝在下面我将会进行讲解),首先呢我们需要创建容量,再利用strcpy将s1._str字符串传过去给s2。(拷贝构造是一个已经创建好的类,给另一个未初始化的类进行拷贝。)

(2)下图为赋值,用法如下图注释,由图可知,赋值是将一个对象的内容赋值给另一个已经创建好的对象。

首先我们不能自己给自己赋值,编译器会报错,所以在模拟实现的时候我们需要考虑这点,其次我们需要删除被赋值的内容和空间(利用delete),再创建和将要使用的对象对另一个对象赋值的对象一样大小的空间,利用strcpy拷贝过去。

(3)一个类有了构造当然也需要有析构啦,析构如下:(比较简单不过多讲解)

(4)由下图很明显iterator指代的是char*,再者begin获取一个字符的迭代器 ,end获取最后一个字符下一个位 置的迭代器

(5)push_back的作用是尾插,在尾插前我们肯定先得判断一下,空间是否足够,不够就需要利用reserve来进行扩容。并且+=运算符重载的函数也是尾插的作用,所以我们可以直接利用push_back来进行编写。

(6)clear的作用是清空有效字符,就如下图很简单。

(7)append的作用是在字符串后追加一个字符串,也是先进行容量的判断,再利用一个strcpy函数将str拷贝到_str的元素的末尾。而+=也如上述一样。(所以我们一般在结尾追加一个字符或者字符串用的比较多的是+=)

(8)下图insert函数是在pos前追加一个字符很显然需要移动pos及其后面元素的位置,将他们往后面移动。

下图是添加一个字符串在pos前面,需要我们进行画图分析,对于while循环里面的条件。(这里只有自己动手画图来分析一下,才能够更好的理解)

(9)substr函数的作用:在str中从pos位置开始,截取长度为len的字符,然后将其返回。

在这里我们创建了一个新的string对象来储存长度为len的字符,并且返回。

大概重要的函数本节讲了一些,难度不算很难,所以就讲了这些做个样例,需要代码可以从本节文章最后自取。

2.浅拷贝

浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。

3.深拷贝

如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给 出。一般情况都是按照深拷贝方式提供。

下面是代码的实现:

本节到此结束啦,如果对你的理解有帮助的话点赞加收藏哦,谢谢啦!!!

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

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

相关文章

洛谷 P9854 [CCC 2008 J1] Body Mass Index

这题让我们计算出 BMI 值,随后判断属于哪个等级。 BMI 值计算公式: ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​。 BMI 范围 对应信息 …

Linux NFS服务搭建及使用

一、NFS 服务器介绍 nfs ( Network File System )即网络文件系统,其基于 UDP/IP使用 nfs 能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上其它计算机中的文件就像在访问自己的计算机一样。 二、NFS 服务器的特点 …

关闭Xshell后,任务将结束-tmux

Xshell标签中的会话结束后,会话中运行的进程也将被结束。 关闭标签 解释: xshell在断开连接后会中止所有正在运行的进程和任务,因为xshell客户端是通过ssh协议连接到远程服务器的,一旦连接断开,所有与该会话相关的进程…

[渗透测试] 主动信息收集

主动信息收集 在红蓝对抗过程中,资产属于核心地位,攻击方(红方)要尽可能的去获取对方资产,暴露目标资产,包括IP地址、网络设备、安全设备、服务器、存储在服务器中的数据等。防守方也要清楚自己有多少有价…

新榜矩阵通 | 家居行业品牌矩阵运营评估报告

添加图片注释,不超过 140 字(可选) 新榜矩阵通推出“品牌矩阵运营评估”系列报告,深入剖析不同行业在新媒体平台上的运营策略及成效,为企业提供一个清晰标准的行业矩阵发展“参考坐标”。 随着自然流量匮乏、行业竞争…

免费【2024】springboot 博物馆展览与服务一体化平台

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

传知代码-智慧医疗:纹理特征VS卷积特征(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S1076633223003537?__cf_chl_rt_tkJ9Aipfxyk5d.leu48P20ePFNd4B2aunaSmzVpXCg.7g-1721292386-0.0.1.1-6249 论文概述 今天我们把视线…

第8集《大佛顶首楞严经》

请大家打开《讲义》第十六页。 辛四、破转计见内。分二:壬一、转计。壬二、破斥。 古德说:不识本心,修法无益。我们的法门有很多选择,你可以去拜佛,你可以去念佛,你可以去持咒。但是从《楞严经》的角度来…

mac如何清理dns缓存 macbook清除dns缓存命令 苹果清理内存软件 为什么需要清除DNS缓存数据

在Mac操作系统中,清除DNS缓存可以帮助解决一些与域名解析有关的问题,例如访问速度慢、网站无法打开等。当遇到网络无法访问互联网等故障时有些用户不知道怎么清理DNS缓存,不清楚苹果mac清理内存怎么清理。接下来就给大家介绍一下Mac电脑清理d…

游泳耳机品牌哪个牌子好?四大高热度游泳耳机综合分析

近年来,游泳耳机的受欢迎程度呈指数级增长,市场热度不断攀升。但作为一名长期关注运动科技的专业人士,我必须提醒大家,在享受水下音乐的同时,也要注意选择专业可靠的产品。市面上许多所谓的“游泳耳机”其实缺乏必要的…

力扣 27移除元素

思路: 题目需要在原数组的基础上,移除等于val的元素,并返回数组移除后的元素数 用双指针遍历,for循环遍历,fast先行 如果当前元素等于val,fast自增是写在for循环中的,slow不变 如果不等,fas…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

08 capture软件新建原理图 09 原理图添加元器件 10 原理图信号连通 11 原理图电源和地连通

08 capture软件新建原理图 && 09 原理图添加元器件 && 10 原理图信号连通 && 11 原理图电源和地连通 第一部分 08 capture软件新建原理图第二部分 09 原理图添加元器件第三部分 10 原理图信号连通第四部分 11 原理图电源和地连通 第一部分 08 capture软…

C#---23:Virtual、abstract、Interface的区别 混合使用的案例

文章目录 1. virtual & abstract & interface 的区别(1)virtual 修饰的方法(2)abstract修饰的方法(3)interface修饰的方法 2. 一个class继承多个interface 的应用3. 一个class继承一个class和多个interface4. abstract作为中间介质(将不同的人以及不同的坦克…

备份软件维护之NETBACKUP NBU知多少

一、基本介绍 NetBackup (NBU) 是一款企业级的数据备份和恢复软件,‌由Symantec公司开发,‌旨在为异构平台提供全面的数据保护。‌ 它支持从远程办公室到数据中心的各种环境,‌包括UNIX、‌Windows、‌Linux和NetWare等操作系统,…

算法-KMP字符串匹配

题目一 解题思路 KMP算法详解 详解next数组 next[i] 就是使子串 s[0…i] 有最长相等前后缀的前缀的最后一位的下标。 总体来说解next数组和模板串匹配的过程很相似&#xff0c;触类旁通 代码模板 #include<iostream> using namespace std; const int N1e510; char …

JavaScript中bind、apply、call的理解

bind、apply、call是什么&#xff1f; bind、apply、call是Function原型的方法&#xff0c;而在js中所有的函数都是Function的实例&#xff0c;所以&#xff0c;有所有函数都可以使用这三个方法。 bind、apply、call有什么作用&#xff1f; 改变this指向 &#xff0c;这是它们…

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试 1. 常用注解 常用注解&#xff1a; TestBeforeAll&#xff0c;AfterAllBeforeEach&#xff0c;AfterEach 使用这些注解需要先引入依赖&#xff1a; <dependency><groupId>org.junit.jupiter<…

[IMX6ULL]移植NXP Linux Kernel 5.15

移植NXP Linux Kernel 5.15 2024-7-7 hongxi.zhu 1. 下载NXP Linux Kernel 5.15 仓库[nxp-imx/linux-imx] git clone -b lf-5.15.y https://github.com/nxp-imx/linux-imx.git 2. 编译NXP Linux Kernel 5.15 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make…

C++树形结构(1 基础)

目录 一.基础&#xff1a; 1.概念&#xff1a; 2.定义&#xff1a; Ⅰ.树的相关基础术语&#xff1a; Ⅱ.树的层次&#xff1a; 3.树的性质&#xff1a; 二.存储思路&#xff1a; 1.结构体存储&#xff1a; 2.数组存储&#xff1a; 三.树的遍历模板&#xff1a; 四.信…