string(1):
我们今天开始学习STL,我们的string是我们的STL里面的一个容器类。
我们的C++含有许多的库:有STL,也有其他的库。
1. string的常见接口:
在使用string类时,必须包含#include头文件以及using namespace std;
1. string的构造函数:
我们看我们的这个图片,上面的第一个constructor函数,这个就是我们的构造函数。然后下面标注了比较重要的几个构造函数。
我们的箭头标记起来的就是比较重要的一些构造函数:
我们看上面的代码,我们把这几个比较重要的构造实现了出来,然后因为我们的string是重载了流插入和流提取的:
所以我们就可以直接对我们的类进行打印,就不需要我们自己对我们的类写运算符重载了,就很方便,而且我们的这个库里面的类还重载了其他的一些。
我们的string里面的构造函数,我们讲了比较重要的一些,剩下的几个我们了解一下:
我们看上面的代码的倒数第二行,我们看到这个赋值运算符,我们这也是可以直接使用它对我们的string类进行赋值运算;我们的库里面就对他进行了运算符重载;
2. string的赋值重载:
这个就是我们的赋值重载,这个比较简单;
2. string类对象的访问及遍历操作:
首先我们看:
第一种:下标+方括号;
我们重载了这个方括号引用;我们的类就可以直接使用它;
我们就可以直接对我们的类里面的字符串修改;
咱们的运算符重载的本质就相当于是我们的下面的图片:
我们对我们的方括号进行重载,然后返回i位置的值的引用,我们就可以修改他。
这时候我们有了这个方括号,我们要遍历我们的字符串就显得比较简单了;
我们看,我们的库里面就带着这些东西,我们要知道我们的字符串的长度的话,我们直接调用我们的size就可以,我们就不需要像以前C语言一样还要测量我们的字符串的长度;(比较方便)
我们的size就表示我们的元素的个数。我们可以直接调用。
第二种:迭代器;
我们看一下我们的迭代器:
我们的begin和end也是我们的库里面就有的,我们可以直接使用;
我们的end是在我们的最后一个元素的下一个元素,我们的end指向的\0的位置。
it表示的是我们的指向我们的第一个位置的指针。
我们还可以修改他;也能对每个数据进行修改;
我们的迭代器是很重要的一种遍历的方式,我们会了迭代器,其他的类的话,我们也可以使用迭代器来进行遍历。
第三种:范围for;
在学习我们的第三种遍历方式之前,我们补充一个知识:auto;
我们看我们的代码:我们的k是什么auto,这是什么类型,我们就要看是谁给他初始化的值。
右边是i,i是int类型的值,那么k这时候也就是int类型的。
所以我们的auto的作用就是替换我们的一些类型,让我们的编译器来推。
我们继续来看这个,我们刚才在设置迭代器的时候,我们的迭代器的类型比较长,这时候我们就可以让auto来代替,让编译器自己去推类型。(但是前提是你要自己知道这个返回值,不然可能看不懂)。
auto还可以代表指针:
我们看我们的这个代码:我们的第一行右边我们可以传i,也可以传&i,我们可以传地址,也可以不传地址,都可以,但是我们的第二行,我们的下面,我们必须要传地址,因为我们的下面已经被指定了。
我们的第三行表示的是我们的auto也可以是引用的参数。
我们继续看上面的代码,我们的auto也可以做参数和返回值,但是这个要比较新的编译器支持,并且这个在使用的时候要谨慎。
我们回归我们的范围for:
容器就是我们的string,还有以后学的vector,还有list。
其实我们的范围for的参数类型也可以是具体的类型,但是我们一般会使用auto来进行,让编译器去推导。
我们的范围for的底层还是我们的迭代器。