STL标准模板库及常用算法
一、STL标准模板库
-
STL是Standard Template Library的缩写,中文名标准模板库,由惠普实验室提供(使用C++模板语言封装的常用的数据结构与算法)
-
STL中有六大组件:
-
算法:以函数模板的形式实现的常用算法,例如:swap\max\min\find\sort
-
容器:以类模板形式实现的常用数据结构,例如:vector\list\array\deque\map\set\mulitiset
-
迭代器:泛型编程,是一种智能指针,它是容器的成员,用于帮助访问容器中的元素,使用方法类似于指针
-
适配器(配置器\配接器):一种用于修饰容器、仿函数、迭代器的东西,例如stack、queue(底层借助deque实现)、priority_queue(底层借助vector实现)
-
仿函数:行为类似函数的类,通过重载()运算符实现效果,目的为了算法功能更加灵活
-
空间适配器(分配器):为容器提供自定义内存的管理和配置,由于只是高级用户才能有改变内存分配策略的权限,因此对于一般用户而言不常用,按照默认管理方式执行
-
-
六大组件之间的关系:
-
容器通过空间适配器获取数据的存储空间,容器中必定存在空间适配器
-
算法通过迭代器获取容器的元素和内存,容器必须提供迭代器,算法才能操作容器
-
仿函数协助完成算法的策略变化
-
适配器用于修饰容器、迭代器、仿函数
-
-
就目前而言,需要理解使用的算法、容器(部分适配器)、迭代器
-
学习STL三部曲:能用、明理(了解泛型编程技术内涵、STL底层源码)、能扩展
-
bilibili 侯捷 STL
二、常用算法
头文件:algorithm
Ⅰ.max\min
找出两个数据中的最大、最小值
Ⅱ.max_element\min_element
找出[start,end)范围内的最大、最小值
注意:带比较元素必须支持 < 运算符,且类型完全相同
Ⅲ.swap
交换两个数据,数据类型必须支持 = 运算符
Ⅳ.iterator find(iterator start,iterator end)
功能:顺序查找
start:指向待查找的第一个元素的指针、迭代器
end:指向待查找的最后一个元素的下一个指针、迭代器
val:待查找的数据
返回值:找到返回 [start,end) 范围内的第一个值为val的迭代器,找不到返回end位置的迭代器
Ⅴ.void sort
void sort( iterator start, iterator end );
void sort( iterator start, iterator end, StrictWeakOrdering cmp );
功能:对范围 [start,end) 范围排序
注意:元素要支持 < 运算符,否则后面需要提供一个比较的回调函数
注意:默认升序,如果想要降序,也需要提供一个比较的回调函数
cmp:
bool cmp( TYPE& a, TYPE& b ) {
return a > b;
}
sort采用什么排序算法?
-
用到了快排,但不止是快排,会根据数据的状态结合上插入排序、堆排序
-
数据量很大时采用快排进行分段排序,一旦分段后的数据量小于一个阈值(16),为了避免快排递归调用额外的消耗,改用插入排序,如果递归的曾次数过深还会改用堆排序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理