[窥视内经] STL,string,vector,list(用法篇)

Posted 一个正直的男孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[窥视内经] 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介绍

使用:



那么看看他们的异同点:

相同的是他们大了都会扩容,不同的是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这个需要接口最好不要调,因为效率也很低,他是个用归并排序进行排序的

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

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

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

使用

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



总结

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

以上是关于[窥视内经] STL,string,vector,list(用法篇)的主要内容,如果未能解决你的问题,请参考以下文章

关于stl中vector的小问题

STL容器__简化版

STL容器__简化版

vector STL

C++中的STL(超详细的操作)

C++中的STL(超详细的操作)