大家好,也是好久没有更新了。今天我想与大家分享的是c++中常用的便捷的应该库。哈哈。可能大家对我们c++的便捷性已经在前面有很多耳闻了。比如我们前面说的类模板。也是很便捷的。但是我们今天这个更加方便了。但缺点就是太多了。经过多年的迭代更新。这个库函数已经很强大了,但是也是因为经过这么多,有些就显得冗余了。这也导致一个资深的c++编程师也不能完全记住string库中。所以在c++官网中有我们可以搜索到。所以我们今天这里就简单简绍一些常用的string中的快捷词。那么事不宜迟我们就来讲讲常用的string。
关键词auto
我们第一个讲的不是我们string中的库函数。哈哈,但是因为这个确实是太好用了。并且我们这篇博客就是本着为大家提供方便快捷的关键词的。所以我觉得在这里先为大家简绍一个后面都用的着的。auto。首先我们来讲讲auto的一些含义:
1:在早期 C/C++ 中 auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,后来这个 不重要了。 C++11 中,标准委员会变废为宝赋予了 auto 全新的含义即: auto 不再是一个存储类型 指示符,而是作为一个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期 推导而得 。 2:用 auto 声明指针类型时,用 auto 和 auto* 没有任何区别,但用 auto 声明引用类型时则必须加 & 3:当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际 只对第一个类型进行推导,然后用推导出来的类型定义其他变量 。 4:auto 不能作为函数的参数,可以做返回值,但是建议谨慎使用 5:auto 不能直接用来声明数组 也许大家现在先看这些还不能体会到auto的好处。但是大家看看我们用几个案例来给大家佐证:(1)首先我们证明的第一点是auto是一个类型指示符。并且这个指示符是自动转换的,怎么说咧,就是说,但我们创建变量的时候不需要再明确写是那个类型了。我们只需要在前面写一个auto然后后面按照平常写的一样就可以了。然后系统就会自动判断。有点像我们前面说的那个隐式类型装换。但我们这里是写了东西的。大家可以看看线面的照片来理解一下。 (2)auto的声明引用特殊不需要其他的比如说*这个我们也用一个例子来佐证 这个大家可以清楚看到我们这里是没有报错的。并且我们第一个打印的是我们的属性。我们x是int类型。后面我们的y和z打印出来的都是一样的。这是不是就表明了我们说的这些都是一样的。 (3)可以用一个auto来定义一行。但是必须是同类型的,不然会出问题。这个就与我们在c中的一点像了。嫌麻烦可以写一个类型,后面跟着就可以了。但是跟着要跟对人。不能把类型搞错了。像下面的图片一样,不能写多种类型。 (4)关于auto不能做参数这件事来说,我觉得大家应该都可以理解,毕竟我们前面建构,隐式类型装换。我们前面讲过我们的一些引用会依据参数类型来区分引用哪个。如果我们的参数都用这个的话,系统不就不知道该引用哪一个函数了吗 (5)然后就是我们的auto不能定义数组,这个大家应该理解吧,虽然我不懂是为什么,但是我们就是大佬这么想应该是有他的道理的,遵守就是了 然后讲了这么多,大家是不是就是,这个auto好像也没什么厉害的地方吧,不是不用确定定义时候的类型了嘛。我多写几个字不一样的嘛,那么接下来我们就将auto最好用的地方,大家看看上面的图片吧,可以简单的把第一行理解为创建了一个数组,然后我们如果用老办法复制一个新的数组的话,需要写注释的那一部分,但是如果我们用auto的话,就很少了,看起来就很简单多了嘛。已就是我们前面说过的auto自动确定数据类型,这不我们只需要确定数据来源,前面写过auto和名字就是可以了。是不是这就体现auto的作用了。
范围for
接下来就是我们讲的第二个便捷的。听名字大家可能会比较懵。什么叫做范围for。看字面意思来说好像就是一堆for循环在一起,那么就叫做范围for。但其实1:对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围,自动迭代,自动取数据,自动判断结束。2:范围for可以作用到数组和容器对象上进行遍历3:范围for的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到。其实说这么多我个人觉得范围for就是简单的重新创建了一个数组,生命周期只在这个foe循环里面,然后我们可以用这个新的数组来实现打印或者其他的工作,这样能使用原数组的数据还不会改变原数组的内容。那么我们还是得用实际例子来给大家展示一下:
我们这里举的例子是我们简单创建一个数组,然后打印,如果我们用原来的方法的话,我们就会在for里面写很多。但是我们这里却只用写简单的几个单词就可以了。这样不仅简洁了需要并且还方便。这是我们范围for的使用,当然没没有规定我们使用的时候只能是int类型。对于其他的类型也是适用的。
string构造函数
好了,终于到我们现在所说的string的内容了。首先我们来介绍的就是String中最基础的一些使用方法。这就有点像我们前面说的This指针。虽然我们写的名字都是一样的,但是它会根据我们的参数类型不同而自动引用不同的函数,这里的string也是一样的。我们这里的string会根据我们括号里面的不同内容来实现不同的效果,例如
上面图片中写了4个string的基础使用方法。也是我们比较常用的。分类也表示一个构造新的对象,和用一个新的数组来创建另一个数组。接着是确认内对象中的数据为多少个统一的字符?然后最后是拷贝构造函数。
这里我就向大家展示了我们上面的三个重点例子,除了第一个创建一个类型的,我们没有,因为第一个是如果我们不写东西的话是一个空字符号打出来不好,所以我们就写了其他三个。大家可以借鉴的使用,我们如果想使用对应的库函数的话,就需要确定我们括号里面的参数与我们库函数中的是对应的,然后并且参数没问题,那么它就会自动用我们库函数并实现。但是我们这里还只是简单的对我们的函数啊数组这些进行使用。也说过c++是经过多年的变化更新迭代进化而来的所以我们的string肯定不止这一些。
string容量大小
接下来我们要讲的就是中的关于容量大小的操作。对于容量大小,大家在我们以前的堆列中或者堆中都有个使用,因为我们需要开辟空间,所以是需要考量空间是否够,然后需否需要申请新的空间大小,这是我们以前在c中使用的,所以在c加加中大佬就看到了这一点。我们准备了方便我们日后使用。那么我们还是抽几个重点,然后给大家演示一下,然后关于其他的到时候我会在最后放一个链接,大家可以直接点链接跳到c加加的官网中查看,当然因为c++是国外的,所以是英文,大家可以拿手机拍照翻译。我觉得这是差不多的。
首先我先去给大家解释一下关于size和length,它的效果其实是一样的,都是返回字符串的有效长度。所以大家其实掌握其中一个就可以了,其实我更倾向于size,毕竟我们使用了很多size,肯定使用的更加方便。 好了,我这儿还是向大家简单解释一下如何使用。
其实对于容量大小的使用的话,就只需要记住我们几个关键的啊,词语就可以了。然后将其打印或者用到我们想用的地方,那么这个关键词就使用好了。
string类对象的访问及遍历操作
我们接下来讲的就是我们的中关于字符一些使用方法。例如开头或者结尾,我们就不需要再计算大小了,我们可以直接引用或者直接返回某点的位置。那我们还是像以前一样先写几个关键词,然后再使用。我们举个例子,然后让大家了解一下如何使用。
我们就以一个简单的例子便利一遍,我们很久以前就知道使用。关于便利我们有很多种方法,我们就用我们这里面的三种方法,分别是begin reading和for。我们可以很清楚的看到begin和中的区别就是多了一个,然后这里代表的意思就是begin代表从左往右开始数的头和尾,然后代表的是从右往左数的开头和尾。就相当于他们是倒过来的,一个是从左位头,然后一个是以右作为头。但其实大家也看到了作用方法是一样的,就只是开头和结尾不一样而已。所以大家稍微知道string对于中类对象的访问和遍历的使用方法了吧。
string类对象的修改操作
当我们实现了对类的访问和便利的操作之后,我们就来对内进行修改改变。这个就是我们对字符串的一些修改,例如在后面加一个什么或者某个位置开始返回后面的字符等等。当然具体有什么作用,用在什么地方,这个暂时谁也保证不了,所以大家在后面实际使用的时候再讨论
关于我们本金小结说的是类的对象和修改,大家可以主要看我们上面的几个例子。后面是为大家补充补充的知识,大家感兴趣的话可以关注一下。那也可以看到我们最后的打印结果是由我们输入的是一样的。我们肯定不能一下子将他如何运用到实际情况,大家可以稍微先磨合一下,然后再讨论具体如何延伸。
string类非成员函数
接下来为大家分享的就是我们中不是成员的函数了。虽然大家可能在上一个小节中已经看到了一些重载函数。比如什么+=呀这些。接下来我们就给大家讲的是其他的一些。大家可以看一下下面的图片。
我想与大家主要分享的是最后两个,一个是获取一行字符串,另外一个是比较大小。然后我们这里着重对这两个举例证明。
首先我们举的例子getline就是我们的scanf。的区别是我们这个可以自主确定我们以什么为结束点。我们以前的scanf就是以回车键为确定,但是我们这个可以自己确定为一个什么符号,例如空格,数字一或者其他的什么作为我们的终止符号。这里我们是没有写,但如果我们没写的话,他会默认为回车键,为我们的终止符号。
接下来就是我们的比较大小了。 是我们简单的判断他们是否相等。利用首先是利用第一个ascll码值,第一个字符串的码值,然后比较如果相等或者怎么样,再判断第二个,第三个,一直到得出符合结论就可以结束了。
这里我就不向大家一一解释了,大家只需要挨着对照看是否利用ascll来判断和他们的使用方法是如何的就可以了。
总结
好的,上面是你们基础会常用到的string中的一些基础内容,然后对于我们现在的其需要是差不多了,当然我们其中的内容肯定还不止这一点。后面后续工作如果对需要的话,可以点击下面的链接,它会自动跳转到c加加的官网中,并且是的库中,然后大家自主寻找。当然这些都是英文的,这个大家可以翻译为中文,毕竟电脑浏览器都会跳出是否编译的弹窗的。https://cplusplus.com/reference/string/string/?kw=string并且如果大家对我后来的中库函数中的一些关键词不知道什么使用的时候,它下面还是会有具体的使用方法的,例如我的前面的几个例子都在库中用过方法。
剩下是大家如果对于我这篇博客中的示例代码感兴趣的话可以点击下面的链接就会自动跳转了。
8月18人: 博客代码以及日常练习