作者:几冬雪来
时间:2023年5月19日
内容:C++模板 + string讲解
目录
前言:
1.模板:
1.函数模板的隐/显示实例化:
2.类模板:
2.STL:
1. 什么是STL:
2.STL六大组件:
3.string类:
结尾:
前言:
在上一篇博客我们结束了动态管理的讲解,并且在最后的时候我们引出了下一个学习的知识板块——模板。那么今天我们就大致的堆模板(初阶)进行讲解吧。
1.模板:
首先在进一步介绍模板的时候,这里我们要知道一个知识。
在这里我们创建模板的时候我们可以用class去代替typname,但是不能用struct去替代typename。
1.函数模板的隐/显示实例化:
在这里我们首先依靠模板来书写一个两个值相加的函数。
在这里我们的a1和a2都是整形,d1和d2都是浮点型,我们都可以对其进行相加。
但是在这里就出现了一个问题。
如果在这里,参数是一个浮点型和一个整形的话,我们的单个T无法确定类型。
因此代码会报错。
这里的一种方法就是强制类型转换。
在上面我们都是实参传递的类型,推演T的类型。
另外一种方法就是我们的显示实例化。
在这里就是我们的显示实例化。
显示实例化,它是用指定的类型实例化。
在上面的显示实例化的代码中,我们的d2发生了隐式类型装换。
都是我们的显示实例化并不是用于上面的两个数相加求值的代码中。
而是更多用于我们下面这种无法判断T类型的代码中。
2.类模板:
在讲解完了我们的函数模板之后,接下来我们就来开始讲解类模板了。
简单的用我们的用栈来举例。
如果我们在这里想要一个栈存int,一个存double。
那么相对于的我们就要创建出这两个类型相对于的类,因为只写一个的话我们的类型是写死的。
可是这样子有过于麻烦了,每多出一个类型我们就要多创建一个类型的栈进行存储。
并且如果某个类发生问题的话,我们每个都要进行修改。
因此在这里我们就用到了类的模板。
通过以上这种代码,我们就可以成功的创建出不同类型的函数。
并且也不用对其失败进行判断。
又因为类模板无法推演实例化。
因此在这里我们就要用到显示实例化。
同样的我们的类模板的声明和定义可以分开进行书写,但是这里并不推荐,因为像我们平常那样分开书写的话会出现问题。
因此到后面我们学习到更深的地方的时候我们再来学习。
在这里每写一个不同函数,要建立一个类模板。
2.STL:
那么在大概的讲解了初阶模板之后,接下来我们就要开始讲STL了。
1. 什么是STL:
2.STL六大组件:
3.string类:
在我们的C语言中我们就存在了string。
同样的在C++中也存在着string,只不过二者的用法稍有不同。
在这里我们将C++中的string的用法叫做。
string类。
那么接下来我们就简单的介绍一下我们的string类要怎么样书写吧。
这里就是我们string的简单用法。
其次,我们的string类也支持多个参数的输入。
同时我们也可以用我们的string类来copy我们字符串的一部分长度。
就类似这个样子我们可以借助string类来copy我们一部分字符串的长度。
s3是我们的被copy的函数,6是下标为6的位置,5是copy的数量。
在这里我们不能不写5,如果不写5的话,这里我们的代码也是会崩溃的。
这个地方也可以直接比较字符串的大小。
像这里我们就比较了两个字符串的大小。
不过因为优先级的缘故,我们需要对两个比较的值加上括号,不然会报错。
同样的我们的string类也可以这样书写。
不过这样写的效率不好,不建议这样使用。
同样的之前我们又说过,string类可以实现增删查改。
这里就是我们实现增删查改的代码。
不过相比起这样书写增删查改,我们还要更加便利的方法。
这样子书写依旧可以完成我们的增。
它的本质还是尾插,只不过它在string类中重载了operator+=,然后我们去进行调用。
接下来还有一个问题。
在这里我们要求把一个变量转为string对象的话要怎么书写。
在这里我们就可以这样进行实现。
不过这个代码还有一些要改进的地方,下一篇博客我们再来细说。
结尾:
在这里我们的模板初阶就这样的科普完毕了,接下来我们就要讲解C++中的核心内容STL了。大家一定要在学好新知识的过程中巩固旧知识,这样才能有所提升。最后希望这篇博客能带来帮助。