一、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值可以不是唯一
本文详细介绍了C++STL,包括其作为标准库核心的作用,主要容器如序列式、关系式容器的区别,以及容器的接口和特性。重点讲解了vector、stack、queue、deque、list、map、multimap和set/multiset等容器的特性和使用场景。
4万+





