概念:什么是STL
简单来来认识一下吧STL吧,他是c++标准模版库包含了容器(vector,list,string……的数据结构),迭代器,算法等。有了他就不需要在造轮子了,用的时候包一下头文件即可使用,他也是泛形编程下的一个代表 
概念:容器 string
先看看文档中对他介绍

大白话就是他就是一个字符型的顺序表,他的作用就对字符的增删查改,当然不止这些,他还拓展出来许多的接口(功能),那么下面就来看看他有啥接口吧
string常用接口介绍
以下接口是常用接口,还有一些就是基本就是没有太多用处就在此介绍了
constructor(构造函数) 
modify
这里就是对string的修改的接口 
重点:operator+=,insert,erase的介绍

operator +=有三个重载,他可以直接在末尾插入一个string类,字符串或者字符
使用: 
insert的介绍 
他有7个重载但是用的多的我感觉就1,3,4,7别的用到的时候查一下文档即可
使用: 
erase的介绍

需要注意len的缺省参数是npos他其实是-1被typedef,然后len是size_t的类型那么他就是2^32位,其实就是把后面全部的数据都删除 
Iterators
这个就是迭代器,听着是不是很高级,确实但是其他用起来和指针一样,且每个容器都会有迭代器
常用接口:

而C++11出的接口没啥用因为其实begin里面也重载了const版的
使用:
如果要获取迭代器的话就需要像这样string::lterator,指定是类中迭代器,或者也可以用auto让编译器自己去推,前期建议还是不要用auto熟悉了类型后且打熟了iterator这个词后在用auto,之前就是auto以为是普通迭代器,后面发现居然是const的脑瓜子嗡嗡的一下午,这里auto就发功了哦在看看这个类型名 
使用二:
你对指针的一切操作迭代器都可以使用

这里有一个重要的概念就是迭代器都是左闭右开,[)和数学中一样,begin是取的到的,end是取不到的
Capacity
这个就是对string内存的一些接口,如获取这个string的长度或者储存空间等
常用接口:

重点:reszie,reserve介绍

使用:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tKHvIDsX-1637560445957)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211121142551762.png)]](https://img-blog.csdnimg.cn/d9dba516b51e42329a199f8bc3ece32b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
那么看看他们的异同点:
相同的是他们大了都会扩容,不同的是resize的n比string长度要小会缩减,而reverse不会,且resize支持初始化
Element access:
我们可以插入数据但我们也需要取数据呀所以还有一下接口
常用接口: 
重点 operator[] 
一般来说有这个就代表啥你知道吗,你就可以随机的数据进行更改与访问!!!!!且有它也说明它物理的地址空间是连续的
使用:

String operations:

重点:find与substr(配合使用获取子串)
find

返回值

Non-member function overloads:
substr
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AML6DnW-1637560445962)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211121193458610.png)]](https://img-blog.csdnimg.cn/08aebd3f7e5141bb95280f637813e6e5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
pos为起始位置,len为长度,不传默认是npos为size_t的-1
使用:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDxi2wpa-1637560445962)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122112659698.png)]](https://img-blog.csdnimg.cn/d2a06137e9bc4058bb04b392a6d50218.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
Non-member function overloads:
这里就是一些杂七杂八的接口但是还是会用到
接口 
重点:operator+
这个接口要少用,为什么呢?

看这是啥传值返回,传值返回会干嘛???当然是调用拷贝构造。那后果是啥???效率不高,所以就尽然少用
用处就是可以在后面链接一个字符,那其实+=就可以解决了所有这个要小心
概念:容器 vector
他就是意义上的顺序表了,这个容器才是用到的模版,真正泛型变成的第一个容器,他可以存任何数据,甚至手别的容器,但是底层还是一块连续的空间
vector常用接口介绍

常用接口和string差不多但是但是这里要重点讲一下构造
(constructor)构造函数
使用:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omqUHLth-1637560445966)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122120848160.png)]](https://img-blog.csdnimg.cn/982b9099aa4640ebaafb2434b957b86c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
且开辟内存这一块和string不太一样,vector是需要多少开皮多少,而string是直接开一块固定的区间

就大致看一一下会发现他其实和string基本上是一样的
容器list
这个容器和前面的不一样有啥不一样呢迭代器不一样,但是用法上是一样的,这个容器其实就是数据结构中的链表,为啥迭代器不一样呢,本质就是前面的容器的物理地址空间上是连续的,但是链表就不一样,他是用指针链接,然后随机存储的
##list常用接口介绍
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JSDASsKe-1637560445968)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122132827209.png)]](https://img-blog.csdnimg.cn/6216504f44cd4c01b997bbe2b604d220.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
仔细看你会发现接口似乎都是差不多的,没错基本上是差不多,但是底层逻辑差很多
(constructor)构造函数
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DYLMbqfU-1637560445969)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122133736446.png)]](https://img-blog.csdnimg.cn/3bc94d450f8c4aceb7d05377fd05bcda.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
发现了吗?发现了吗?他的构造和vector一样
上述有一个接口是sort这个需要接口最好不要调,因为效率也很低,他是个用归并排序进行排序的
在这里你猜一猜他底层是啥逻辑结构
- 单链表
- 双链表
- (带头)单链表循环
- (带头)双链表循环
当当当,当然是4你看有back接口说明了啥,有尾插单双链表排除,有insert那么单链循环也排除了,那么只有4(带头)双链表循环才能抗的起重任
使用
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTXpI9P4-1637560445970)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122135319908.png)]](https://img-blog.csdnimg.cn/f45b894fd44243e4a1294c89c06b2084.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
他也是和string一样接口差不多但是逻辑上差了很多
总结
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaTMJDWK-1637560445971)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211113123307485.png)]](https://img-blog.csdnimg.cn/341b31fff8d241e68c75e78a9fbcfea0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
看到这里你或许还有一些迷茫没事,后面还有轮子让你知道他是如何实现的,那么你对这些容器用起来会更加的的心应手
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPGbgIA0-1637560445972)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122133214086.png)]](https://img-blog.csdnimg.cn/245f393c8baf4f36b8c202fb086c428c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Liq5q2j55u055qE55S35a2p,size_20,color_FFFFFF,t_70,g_se,x_16)
|