模拟实现C++的string库的改进

之前写过,(8条消息) 模拟实现C++的string库_Qianxueban的博客-CSDN博客

比较简单,我就直接截图的。我要改进一下。

1.改进string类中可以在字符串中存储\0

模拟实现C++的string库的改进_第1张图片

 但我写的没有这项功能,究其根本就是代码我用的都是strcpy等等函数,应该用memcpy等等函数,他就不是受\0的制约了。

模拟实现C++的string库的改进_第2张图片

 模拟实现C++的string库的改进_第3张图片

 模拟实现C++的string库的改进_第4张图片

 2.流插入和流提取,可以不需要用友元,以及流提取的一些小细节

模拟实现C++的string库的改进_第5张图片

 1.写流提取的话,很多的第个思路就是下面这个,一个个读;

但是,你会发现你无法结束这个函数,主要原因就是:cin无法读取空格和换行符。

回想一下,我们之前再传入多个数时,都是以空格或者换行来区分的,这就说明了cin是无法读取空格和换行符的。

模拟实现C++的string库的改进_第6张图片

 模拟实现C++的string库的改进_第7张图片

所以就要用到istream中有一个成员函数get()可以读取这一功能的。 

模拟实现C++的string库的改进_第8张图片

模拟实现C++的string库的改进_第9张图片

 就可以初步的实现这个功能了,当然肯定还是要有一些细节来处理的:

模拟实现C++的string库的改进_第10张图片

 所以我们要清空一下s这个string。

模拟实现C++的string库的改进_第11张图片

 还有一个很细节的注意事项,所以我们会发现写代码写出bug很正常,因为我们不可以考虑到所有的情况。

模拟实现C++的string库的改进_第12张图片模拟实现C++的string库的改进_第13张图片

 最后一点,因为我们是一个个加到,如果一次性要输入很出了字符,就要不断地扩容,可以看一下:(看结果就好了,代码我做了点修改,让他扩容的时候展现出来了)

模拟实现C++的string库的改进_第14张图片

 所以我们可以用一个数组来存储,最后一次性加上去:

 模拟实现C++的string库的改进_第15张图片

3.resize的实现

模拟实现C++的string库的改进_第16张图片

 4.深浅拷贝

如果我们不写operator=运算符重载的成员函数,那么系统就会默认复制函数,但是这是浅拷贝

模拟实现C++的string库的改进_第17张图片

上面这个程序就会报错:为什么呢?这就要考虑到系统给我们的默认赋值函数仅仅是简单的拷贝:

 模拟实现C++的string库的改进_第18张图片

 模拟实现C++的string库的改进_第19张图片

 这个是最简单想到的程序,接下来就是改进他。

模拟实现C++的string库的改进_第20张图片

 最现代写法就是,让系统帮我们调用拷贝构造函数;

模拟实现C++的string库的改进_第21张图片

 5.运算符重载比较

模拟实现C++的string库的改进_第22张图片

 

你可能感兴趣的:(c++,开发语言)