• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

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

互联网 diligentman 2小时前 2次浏览

文章目录

  • 概念:什么是STL
  • 概念:容器 string
    • string常用接口介绍
  • 概念:容器 vector
    • vector常用接口介绍
  • 容器list
  • 总结

概念:什么是STL

简单来来认识一下吧STL吧,他是c++标准模版库包含了容器(vector,list,string……的数据结构),迭代器,算法等。有了他就不需要在造轮子了,用的时候包一下头文件即可使用,他也是泛形编程下的一个代表
[窥视内经] STL,string,vector,list(用法篇)

概念:容器 string

先看看文档中对他介绍

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

大白话就是他就是一个字符型的顺序表,他的作用就对字符的增删查改,当然不止这些,他还拓展出来许多的接口(功能),那么下面就来看看他有啥接口吧

string常用接口介绍

以下接口是常用接口,还有一些就是基本就是没有太多用处就在此介绍了

constructor(构造函数)
[窥视内经] STL,string,vector,list(用法篇)

modify

这里就是对string的修改的接口
[窥视内经] STL,string,vector,list(用法篇)

重点:operator+=,insert,erase的介绍

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

operator +=有三个重载,他可以直接在末尾插入一个string类,字符串或者字符

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

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

他有7个重载但是用的多的我感觉就1,3,4,7别的用到的时候查一下文档即可

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

erase的介绍

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

需要注意len的缺省参数是npos他其实是-1被typedef,然后len是size_t的类型那么他就是2^32位,其实就是把后面全部的数据都删除
[窥视内经] STL,string,vector,list(用法篇)

Iterators

这个就是迭代器,听着是不是很高级,确实但是其他用起来和指针一样,且每个容器都会有迭代器

常用接口:

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

而C++11出的接口没啥用因为其实begin里面也重载了const版的

使用:

如果要获取迭代器的话就需要像这样string::lterator,指定是类中迭代器,或者也可以用auto让编译器自己去推,前期建议还是不要用auto熟悉了类型后且打熟了iterator这个词后在用auto,之前就是auto以为是普通迭代器,后面发现居然是const的脑瓜子嗡嗡的一下午,这里auto就发功了哦在看看这个类型名
[窥视内经] STL,string,vector,list(用法篇)

使用二:

你对指针的一切操作迭代器都可以使用

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

这里有一个重要的概念就是迭代器都是左闭右开,[)和数学中一样,begin是取的到的,end是取不到的

Capacity

这个就是对string内存的一些接口,如获取这个string的长度或者储存空间等

常用接口:

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

重点:reszie,reserve介绍[窥视内经] STL,string,vector,list(用法篇)

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

使用:

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

那么看看他们的异同点:

相同的是他们大了都会扩容,不同的是resize的n比string长度要小会缩减,而reverse不会,且resize支持初始化

Element access:

我们可以插入数据但我们也需要取数据呀所以还有一下接口

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

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

一般来说有这个就代表啥你知道吗,你就可以随机的数据进行更改与访问!!!!!且有它也说明它物理的地址空间是连续的

使用:

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

String operations:

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

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

find

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

返回值

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

Non-member function overloads:

substr

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

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

使用:

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

Non-member function overloads:

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

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

重点:operator+

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

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

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

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

概念:容器 vector

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

vector常用接口介绍

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

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

(constructor)构造函数

使用:

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

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

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

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

容器list

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

##list常用接口介绍

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

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

(constructor)构造函数

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

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

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

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

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

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

使用

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

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

总结

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

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

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


程序员灯塔
转载请注明原文链接:[窥视内经] STL,string,vector,list(用法篇)
喜欢 (0)