文章目录
- 概念:什么是STL
- 概念:容器 string
- string常用接口介绍
- 概念:容器 vector
- vector常用接口介绍
- 容器list
- 总结
概念:什么是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介绍
使用:
那么看看他们的异同点:
相同的是他们大了都会扩容,不同的是resize的n比string长度要小会缩减,而reverse不会,且resize支持初始化
Element access:
我们可以插入数据但我们也需要取数据呀所以还有一下接口
常用接口:
重点 operator[]
一般来说有这个就代表啥你知道吗,你就可以随机的数据进行更改与访问!!!!!且有它也说明它物理的地址空间是连续的
使用:
String operations:
重点:find与substr(配合使用获取子串)
find
返回值
Non-member function overloads:
substr
pos为起始位置,len为长度,不传默认是npos为size_t的-1
使用:
Non-member function overloads:
这里就是一些杂七杂八的接口但是还是会用到
接口
重点:operator+
这个接口要少用,为什么呢?
看这是啥传值返回,传值返回会干嘛???当然是调用拷贝构造。那后果是啥???效率不高,所以就尽然少用
用处就是可以在后面链接一个字符,那其实+=就可以解决了所有这个要小心
概念:容器 vector
他就是意义上的顺序表了,这个容器才是用到的模版,真正泛型变成的第一个容器,他可以存任何数据,甚至手别的容器,但是底层还是一块连续的空间
vector常用接口介绍
常用接口和string差不多但是但是这里要重点讲一下构造
(constructor)构造函数
使用:
且开辟内存这一块和string不太一样,vector是需要多少开皮多少,而string是直接开一块固定的区间
就大致看一一下会发现他其实和string基本上是一样的
容器list
这个容器和前面的不一样有啥不一样呢迭代器不一样,但是用法上是一样的,这个容器其实就是数据结构中的链表,为啥迭代器不一样呢,本质就是前面的容器的物理地址空间上是连续的,但是链表就不一样,他是用指针链接,然后随机存储的
##list常用接口介绍
仔细看你会发现接口似乎都是差不多的,没错基本上是差不多,但是底层逻辑差很多
(constructor)构造函数
发现了吗?发现了吗?他的构造和vector一样
上述有一个接口是sort这个需要接口最好不要调,因为效率也很低,他是个用归并排序进行排序的
在这里你猜一猜他底层是啥逻辑结构
- 单链表
- 双链表
- (带头)单链表循环
- (带头)双链表循环
当当当,当然是4你看有back接口说明了啥,有尾插单双链表排除,有insert那么单链循环也排除了,那么只有4(带头)双链表循环才能抗的起重任
使用
他也是和string一样接口差不多但是逻辑上差了很多
总结
看到这里你或许还有一些迷茫没事,后面还有轮子让你知道他是如何实现的,那么你对这些容器用起来会更加的的心应手