STL容器综合(string除外)

①vector容器:

类似于数组,但是他是单端数组

与数组的区别:数组是静态空间,vector是动态可扩展的

动态扩展:找一个更大的新内存空间,把原空间的的数据拷贝一份放到新空间,然后释放掉原空间,而非在原空间的后面续接新空间。

它的迭代器支持随机访问。

原理图:

构造函数:

赋值:

容量和大小:

插入与删除:

数据存取:

容器互换(交换两个vector容器里面的数据,可用于收缩容量[不是大小]):

预留空间:

 

②deque容器:

双端数组,可对头尾进行插入删除操作

它的迭代器支持随机访问。

与vect的区别:

1.vector对于头部的插入效率低,数据量越大效率越低。

2.deque相对于vector,头部插入删除速度比vector快。

3.vector访问元素时的速度比deque快,这和于两者内部实现有关。

原理图:

内部原理:

deque内部有中控器,维护每段缓冲区中的内容,缓冲区存放真实数据,中控器是维护每个缓冲区的地址,使得deque像一片连续的空间。

构造函数:

赋值:

大小:

插入和删除:

数据存取:

排序(采用了sort算法):

 

③stack容器(也叫栈):

它是一种先进后出的数据结构,只有一个出口。。

只有顶端的元素才能被外界使用,因此栈不允许有遍历(元素个数不改变的情况下调取出来)行为(可以通过一个一个执行出栈来查看栈内元素)!!

但是可以判断栈是否为空,也可以返回元素个数。。

原理图:

各类常用接口:

 

④queue容器(队列容器):

它是一种先进先出的数据结构,它拥有两个出口。。

此容器只允许在一端新增元素,另一端移除元素,只有队头队尾才能被调用,也不允许存在遍历(元素个数不改变的情况下调取出来)行为(采用出队来查看元素)!!

同样他也能判断队列是否为空,以及返回队列的大小。

原理图(只能队尾进,对头出):

各类常用接口:

 

⑤list容器(链表):

作用:将数据进行链式存储。。

链表是由一些列的结点组成的。。

一个节点中包含有两个域:分别是存储数据元素的数据源和存储下一个结点地址的指针域。。

在STL中,链表是一个双向循环的链表。。

list有一个很重要的性质:插入操作和删除操作都不会造成原有的lisst迭代器的失效,这在vector是不成立的(vector更换内存的时候就会使原来的迭代器失效[原来的迭代器仍旧指向之前的位置])。。

优:可以对任意位置进行快速插入或删除元素,同时采用动态内存分配,不会造成内存浪费和溢出。

缺:容器遍历的速度没有数组快,占用的内存空间比数组大。

链表原理:

原理图:

由于存储的方式不是连续的内存空间,因此链表的迭代器只支持前移和后移,属于双向迭代器。。

构造函数:

赋值和交换:

大小:

插入与删除:

注意:其中大部分都要用到迭代器,例如insert(xx.begin(),199),其中xx为容器名,199为数值。。

数据存储(不支持中括号或是at进行访问):

反转与排序:

注意:所有不支持随机访问迭代器的容器,都不可以使用标准算法(但是其容器内部会提供一些基础算法),因此此处不能采用标准的sort()算法。。

对于自定义的数据类型在进行排序的时候需要进一步指定排序规则!!

 

⑥set/multiset容器:

作用:当元素被插入时,会自动进行排序。。

本质:set/multiset容器属于关联型容器,底层是采用二叉树来进行实现的。。

set与multiset的区别:set不允许容器中有重复的元素;multiset运行容器中含有重复的元素。

构造与赋值:

插入数据只有insert方式,没有push_back之类的方式。。

大小和交换:

插入和删除:

查找和统计:

 

对于set容器来说,只返回0或1。。

set与multiset的区别:

1.set不可以插入重复数据,但是multiset可以

2.set插入数据的同时会返回插入结果,以此来表示插入是否成功(multiset没有)

3.multiset不会检测数据,因此可以插入重复数据

pair对组的使用:

本质:成对出现的数据,利用队组可以返回两个数据。。

第一个值的调用采用xx.first,同理第二个数采用xx.second即可调用

容器排序:

可以利用仿函数来改变排序规则!

set容器的排序默认是从小到大。。

自定义的数据类型都要手动去写仿函数来规定排序规则。

 

⑦map/multimap容器:

简介:

1.map中所有元素都是pair(对组)

2.pair中的第一个元素为Key(键值),起索引作用,第二个元素为value(实值)

3.与set相似,map中所有元素都会按照键值(key,不是value)自动排序。

本质:map/multimap是关联式容器,底层结构是二叉树。

优:可以通过键值快速找到实值

map/multimap的区别:map不允许有重复的键值元素,multimap可以。

构造和赋值:

 

大小与交换:

插入和删除:

也可以采用中括号(中括号建议用于查找,而非插入数据)

查找和统计:

容器排序:

可以利用仿函数来改变排序规则!(基本同set)

map容器的排序默认是按key值从小到大。。

自定义的数据类型都要手动去写仿函数来规定排序规则。

posted @ 2022-12-30 13:54  Morning枫  阅读(19)  评论(0编辑  收藏  举报