什么是****STL
STL(standard template libaray- 标准模板库 ) : 是 C++ 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 。
STL****的六大组件

标准库中的string类
1、string类的核心成员:
指向第一个有效字符地址的char*指针,有效字符个数,有效字符容量。
注意有效字符个数是不包含\0的,底层存储字符串所开辟的空间应该是有效字符容量+1,额外的一个是用来保存\0的。string之所以要在底层以c字符串的形式来维护,是方便将string转换成c字符串。当有效字符个数为0时,指针指向的是\0。
2、string类的核心方法:
构造函数:

string的默认构造函数,其底层字符串为空串

拷贝构造

c字符串构造函数

底层字符串为n个c字符


其他成员函数:
size

返回有效字符个数,不包括\0
resize


调整有效字符个数,如果n小于当前有效字符个数,那就直接截断,剩下的n个有效字符不变,有效字符容量不变。如果n大于当前有效字符个数,那就增加有效字符的个数,用c来填充新增加的字符,如果没有第二个参数那就用\0来填充
capacity

返回有效字符容量,注意有效字符容量+1==底层空间大小,会为\0留一个字节,所以该值返回的并不是底层空间大小
reserve

如果n<=当前有效字符容量,那该函数什么都不做,如果n大于当前有效字符容量,那就将有效字符容量增加到n,即底层空间扩大到n+1,扩容不影响有效字符
clear

调整有效字符个数为0,string的指针成员指向\0,有效字符容量不变
empty

如果当前有效字符个数为0,那就返回true,否则false
operator[ ]

返回指定下标对应的字符
operator+=

将string/常量字符串/字符 添加到string维护的字符串后面
insert



pos是有范围的,范围是0~size也就是说\0的位置也是可以插入的,如果不在这个范围,那就会报错越界,之后就是把string/c字符串/n个c字符 插入到指定位置,可能会有扩容发生
erase

pos是第一个要删除的字符的下标,pos的范围是0~size,如果pos为size就什么都不删除即可,len为要删除字符个数,如果该值大于pos以后的有效字符个数,那就只把pos以后的有效字符全删了即可
swap

交换两个string的成员变量即可
c_str

返回string的指针成员
find



从string维护的字符串的pos位置开始查找,找出第一个匹配目标 string/c字符串/字符 的位置,如果找不到就返回npos,npos是string类的一个静态成员变量,其类型为size_t,值为-1,相当于无穷大了
substr

截取一个子串,从pos下标开始,长度为len,假设第二个参数不给那默认是npos,如果长度len大于包含pos在内以后的有效字符个数,那就只返回包含pos在内以后的有效字符构造的string即可
静态成员变量:

npos表示一个非常大的数
string库中的全局函数:
这些函数都不是string类的成员函数,注意这些函数不是string类的静态成员函数,静态成员函数也是成员函数,但这些是全局函数,被std命名空间包裹
operator+



创建一个新的string,将第一个string和 string/c字符串/字符 都拼接到该新字符串后,然后返回新字符串
注意:operator+=是string的成员函数,该string是会被改变的,而且也不会有新string被创建
getline

从istream对象中读取一行数据到str中,终止符为\n

从istream对象中读取数据到str中,终止符自定义