初识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.深拷贝
如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给 出。一般情况都是按照深拷贝方式提供。
下面是代码的实现:
本节到此结束啦,如果对你的理解有帮助的话点赞加收藏哦,谢谢啦!!!