一.构造函数
我们来看一下,string的底层就是一个字符型指针和一个size来表示string的大小,capacity来表示分配的内存大小。
我们来看我们注释掉的第一个构造函数,我们是通过初始化列表来初始化size的大小,再通过size的大小来初始化其他两个变量的,为什么图中要多给_str开一个空间呢,这是因为要存放\0的原因。
注释掉的第二个是无参构造,我们发现可以使用缺省参数来合并成为一个构造函数。
我们给的缺省值是一个空字符串,但是在下面我们给过它空间之后就会自动有一个\0了,所以不需要我们手动给它\0的值。
就是通过一个char*类型的指针来接收我们给的字符串的,然后通过构造函数完成初始化的,通过strcpy拷贝过去。
二.c_str
这个的作用就是我们在使用string的时候创建的是类对象,但是我们要兼容c语言,所以我们也要把我们的string串转换为char* 类型的数组,使它可以和c语言兼容。
三.reserve
我们都只写它们的主要功能,这个函数的主要功能就是扩容,就是我们的如图所示,多给了一个空间的原因上面说过了,是因为要存放\0的,这个就是我们新申请一块空间,然后把内容拷贝过去,然后再释放原来的空间,让它指向新的空间即可完成扩容的操作了。
四.push_back
这个的实现就是先检查是否需要扩容,其次再插入字符,把size++,再把\0的位置给一下。
五.append
这个strcpy每次先找到\0,然后才会把内容从\0的位置赋值过来,str+size,我们直接帮助它找到了\0的位置,更加高效。
这个就是先二倍扩容看看符合不符合要求,然后不符合再次扩容即可。
六.operator+=
这个我们将介绍两种,都是常用的。
这两个复用了上面的代码一个是+=一个字符的,一个是+=一个字符串的。
七.insert
这个我们将介绍两种用法的底层,这是第一种。
不能从前往后挪动,因为数据可能被覆盖,只能从后往前挪动了。
这个也是先扩容,然后先从后往前把字符全部向后挪动n个位置,给需要的地方腾出n个位置,然后通过一个count来控制这个ch的个数,然后把那些空位置填上去即可。
还没有写完先发出来,明天或者后天博主就会全部发出来。
八.结束语
感谢大家的查看,希望可以帮助到大家,做的不是太好还请见谅,其中有什么不懂的可以留言询问,我都会一一回答。 感谢大家的一键三连。