wangqiuji

 

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),为了避免快排递归调用额外的消耗,改用插入排序,如果递归的曾次数过深还会改用堆排序

posted on 2023-09-04 11:11  翻斗花园牛大爷!  阅读(25)  评论(0编辑  收藏  举报

导航