STL(容器)

本文详细介绍了C++STL,包括其作为标准库核心的作用,主要容器如序列式、关系式容器的区别,以及容器的接口和特性。重点讲解了vector、stack、queue、deque、list、map、multimap和set/multiset等容器的特性和使用场景。

一、STL概述

STL是Standard Template Library的简称,译为“标准模版库”。

是C++的标准程序库的核心,它深刻影响了标准程序库的整体结构,是一种泛型编程

二、STL容器 

1. 序列式容器

序列式容器:vector、list、deque 

2. 关系式容器 

关系式容器:set、multiset、map、multimap 

三、可序与已序 

可序

每个元素都有固定的位置,元素的位置取决于插入的时机和地点(下标),和元素值无关

(元素进入容器容易,元素的查找麻烦) 

已序

元素的位置取决于元素值的大小,和插入的次序无关

(元素进入容器麻烦,元素的查找容易) 

四、容器接口

不管可序容器还是已序容器,有一些共同的能力,也就是共同的函数接口。

这些函数主要是用于进行数据比较迭代储存的。

五、STL容器满足的特性

1)外部数据外部管理,内部数据内部管理容器进行元素的插入操作时,内部实现的是拷贝操作,容器中的每一个元素都要被拷贝或赋值

2)容器总体而言所有的元素都形成次序(下标次序),多次遍历每个元素次序总是相同的

3)各项操作并非绝对安全

 六、迭代器

迭代可以理解为遍历

每一个STL的容器当中都会有一个迭代器,迭代器是帮助我们去容器中查找所有的元素

迭代器 

可遍历STL容器内全部或者部分元素的对象,一个迭代器用来指出容器中的一个特定位置。

​​​​​​​它类似于智能指针,具有遍历复杂数据结构的能力,其运行机制取决于其所遍历的数据结构。

 半开区间

一个迭代器指向容器的某个位置,两个迭代器会形成区间,这个区间叫半开区间

半开区间的优点:

1)为遍历元素,提供循环的结束时机

2)不需要为空区间采取特殊的处理手段 

七、容器

1. vector

封装了动态大小数组的顺序容器

vector特性:

1)顺序序列,有序群集

2)支持随机存取

3)在末端添加或删除元素时,性能好

4)前端、中部插入或删除元素,性能差

2. stack

栈是一种先进后出的数据结构,是操作受限的线性表

3. queue

队列是一种先进先出的数据结构,也是操作受限的线性表,不提供迭代器操作

4. deque

双向开口的连续线性空间(动态将多个连续空间通过指针数组结合在一起)

可以理解为deque是双端数组,vector是单端的

deque在接口上和vector非常相似 

deque特性:

1)头尾开放,能在头尾进行快速插入和删除

2)支持随机存储

3)在中端部分插入、删除元素的速度相比较慢,因为所有元素都需要移动以腾出或填补空间 

5. list

list使用一个双向链表来管理元素

list特性

1)不支持随机存取

2)任何位置上,插入和删除都很快

3)插入和删除动作不会导致指向其他元素的各个指针、引用、迭代器失效 

6. map

一种非严格意义上的平衡二叉树(二叉查找树

map特性

1)map的元素类型Key和T,必须满足两个条件

1⃣️key/value必须具备可赋值和可复制的性质

2⃣️对排序准则而言,key必须是可比较的

2)Map根据元素的key自动对元素进行排序。根据已知的key搜寻某个元素时,就能够有很好的性能,而根据已知的value搜寻元素时,性能比较差 

7. multimap

map容器中一个key对应一个value,multimap容器中一个key可以对应多个value 

8. set

和map也很类似,也是封装了平衡二叉树,关联式容器 

9. multiset

和set有区别的地方是,值可以出现多个。set中值是唯一,multiset值可以不是唯一 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你怎么知道我头发乌黑浓密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值