[窥视内经] STL,string,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介绍在这里插入图片描述

在这里插入图片描述

使用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tKHvIDsX-1637560445957)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211121142551762.png)]



那么看看他们的异同点:

相同的是他们大了都会扩容,不同的是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)]

pos为起始位置,len为长度,不传默认是npos为size_t的-1

使用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDxi2wpa-1637560445962)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122112659698.png)]



Non-member function overloads:

这里就是一些杂七杂八的接口但是还是会用到

接口
在这里插入图片描述


重点:operator+

这个接口要少用,为什么呢?

在这里插入图片描述

看这是啥传值返回,传值返回会干嘛???当然是调用拷贝构造。那后果是啥???效率不高,所以就尽然少用

用处就是可以在后面链接一个字符,那其实+=就可以解决了所有这个要小心



概念:容器 vector

他就是意义上的顺序表了,这个容器才是用到的模版,真正泛型变成的第一个容器,他可以存任何数据,甚至手别的容器,但是底层还是一块连续的空间


vector常用接口介绍

在这里插入图片描述

常用接口和string差不多但是但是这里要重点讲一下构造



(constructor)构造函数

使用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omqUHLth-1637560445966)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122120848160.png)]

且开辟内存这一块和string不太一样,vector是需要多少开皮多少,而string是直接开一块固定的区间

在这里插入图片描述

就大致看一一下会发现他其实和string基本上是一样的



容器list

这个容器和前面的不一样有啥不一样呢迭代器不一样,但是用法上是一样的,这个容器其实就是数据结构中的链表,为啥迭代器不一样呢,本质就是前面的容器的物理地址空间上是连续的,但是链表就不一样,他是用指针链接,然后随机存储的

##list常用接口介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JSDASsKe-1637560445968)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122132827209.png)]

仔细看你会发现接口似乎都是差不多的,没错基本上是差不多,但是底层逻辑差很多



(constructor)构造函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DYLMbqfU-1637560445969)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122133736446.png)]

发现了吗?发现了吗?他的构造和vector一样

上述有一个接口是sort这个需要接口最好不要调,因为效率也很低,他是个用归并排序进行排序的

在这里你猜一猜他底层是啥逻辑结构

  1. 单链表
  2. 双链表
  3. (带头)单链表循环
  4. (带头)双链表循环

当当当,当然是4你看有back接口说明了啥,有尾插单双链表排除,有insert那么单链循环也排除了,那么只有4(带头)双链表循环才能抗的起重任

使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTXpI9P4-1637560445970)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122135319908.png)]

他也是和string一样接口差不多但是逻辑上差了很多



总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaTMJDWK-1637560445971)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211113123307485.png)]

看到这里你或许还有一些迷茫没事,后面还有轮子让你知道他是如何实现的,那么你对这些容器用起来会更加的的心应手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPGbgIA0-1637560445972)(/Users/wuxiaobo/Library/Application Support/typora-user-images/image-20211122133214086.png)]

猜你喜欢

转载自blog.csdn.net/Legwhite/article/details/121470132