Bootstrap

C++——string

作者:几冬雪来 

时间:2023年5月29日

内容:C++——string内容讲解 

目录

前言: 

1.string(续):  

1.string::operator[]: 

2.string:: length():

3.string:: max_size():

4.string::capacity():

5.string::clear(): 

结尾: 


前言: 

在上一篇C++的博客中,我们结束了对C++中初阶模板的讲解,并且也是简单的介绍了一下我们C++的string,然而C++中string的知识十分之多,今天我们就进一步对其进行讲解和认识。 

   

1.string(续):  

接下来我们就来对string进行进一步的了解。 

1.string::operator[]: 

接下来讲解的是我们的——string::operator[]

在我们的C语言的学习中,如果涉及到了''[]''的话,第一反应一定会联想到我们的数组

那么在C++中我们的string里面的string::operator[],有是什么意思?

接下来我们就写一串代码

在这里用string的方法我们将字符一个一个的打印了出来

从下面s1的大小判断来看,它没有存放我们的''/0''

但是这里其实不然,如果我们让i<=s1.size()的话,它还是不会进行显示的

那么这里就有人问了:写了这个代码也没见得和string::operator[]有什么关系啊

这里就要牵扯到我们的底层原理了。

这里就是我们两个代码底层的区别

第一个代码进行[]++操作的话,类似于对其进行解引用的操作

而我们的第二个代码就涉及到了string::operator[],在这里它是一个赋值的操作,赋值的值就在[]中。 

在这里我们还涉及我们的迭代器,这个我们就需要轮到后面去讲解了。 

2.string:: length():

这里我们来讲解string:: length()

这里的length指的是长度的意思

这里我们的length和size的区别就在于,size表示数据的个数,length表示的是长度

这里我们也可以看出它们的大小都是相等的

为什么存在length的情况下还有size的存在

这是因为我们的length只能用于表达线性表,非线性表不太能表达出来

size的使用范围更加的广阔

可是因为向前兼容的缘故,length比size更早的出来了,但是以后我们都可以用size去替代length。 

3.string:: max_size():

这里我们的表示返回它可以达到的最大长度。 

这个地方我们就成功的打印出来了它可达到的最大长度。

但是我们的——string:: max_size,在实际上却是很少去使用它的。

因为在不同的接口下,它是有差异的

因此它在实际使用中毫无意义。 

但是我们不能将其删除,因为我们的语法和库都需要向前兼容。

4.string::capacity():

这里capacity则是用来查看容量的

这里我们就可以看出其容量的大小

它的大小为15

那么我们capacity的扩容机制又是怎么样的呢? 

这里就是我们每次扩容后容量的大小

我们可以看出我们的容量是成功的进行了扩容。 

但是我们也可以看出它的扩容大小是没有被规定的,第一次扩容是2倍扩容,后面的基于1.5倍的扩容。 

而在Linux中我们的容量则是以2倍的形式进行扩容操作的

5.string::clear(): 

下面来讲解我们的——string::clear()

看到clear,熟悉语言的人就明白这里的操作是我们清理数据的操作

从代码打印出来的结果上来看。

我们的string::clear(),将我们的数据进行了删除。

不过这里我们只是将string::clear的数据清空了而且,string::clear()并不会对capacity进行一个清空的操作

因为capacity是我们的容量,如果清空了之后,下次我们要向这个容量输入数据的话还要进行扩容的操作,比较的麻烦

结尾: 

我们的string要介绍的内容还有很多,剩下的内容我们就留到下一篇博客再进行讲解吧。最后希望这篇博客能给大家带来帮助。

;