1.什么是STL?
STL (Standard Template Library) ,即标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入 / 输出、数学计算等功能。 该库包含了诸多在计算 机科学领域里所常用的基本数据结构和基本算法。 为广大C++ 程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。
2.学习STL能干什么?
1. 在 C++ 中如果定义一个数组,可以采用如下方式: int a[n]; 这种定义数组的方法需要事先确定好数组的长度,即 n 必须为常量,这意味着,如果在实际应用中无法 确定数组长度,则一般会将数组长度设为可能的最大值,但这极有可能导致存储空间的浪费。
2. 还可以采用在堆空间中动态申请内存的方法,此时长度可以是变量: int *p = new int[n];
这种定义方式可根据变量 n 动态申请内存,不会出现存储空间浪费的问题。但是,如果程序执行过程中出现空间不足的情况时,则需要加大存储空间,此时需要进行扩容:
3. 新申请一个较大的内存空间,即执行 int * temp = new int[m]; 将原内存空间的数据全部复制到新申请的内存空间中,即执行memecpy(temp, p, sizeof(int)*n); 将原来的堆空间释放,即执行delete [] p; p = temp;
4.完成相同的操作,如果采用 STL 标准库,则会简单很多,因为大多数操作细节将不需要程序员关心。
3.STL中六大组件
STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成。
1. 容器:一些封装 数据结构 的模板类,例如 vector 向量容器、 list 列表容器等。
2. 算法: STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数, 这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部 分位于头文件 <numeric> 中。
3.迭 代器: 在 C++ STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的 胶合剂。
4.函数对象: 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函 数对象(又称仿函数)。
5.适 配器: 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作 的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。
6.内存分 配器: 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分 配策略的需求,因此内存分配器对于一般用户来说,并不常用。
4.STL容器
它就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。STL 提供有 3 类标准容器,分别是序列容器、排序容器和哈希容器,其中后两类容器有时也统称为关联容器。
序列容器: 主要包括 vector 向量容器、 list 列表容器以及 deque 双端队列容器。之所以被称为序列容 器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时, 指定在什么位置,元素就会位于什么位置。
排序容器:包括 set 集合容器、 multiset 多重集合容器、 map 映射容器以及 multimap 多重映射容器。排序容器中的元素默认是由小到大排序好的,即便是插入元素,元素也会插入到适当位置。所以关联容器在查找时具有非常好的性能。
哈希容器: C++ 11 新加入 4 种关联式容器,分别是 unordered_set 哈希集合、 unordered_multiset 哈 希多重集合、 unordered_map 哈希映射以及 unordered_multimap 哈希多重映射。和排序 容器不同,哈希容器中的元素是未排序的,元素的位置由哈希函数确定。
STL中的容器
序列容器 vector( 向量容器 ) list( 双向链表 ) deque( 双端队列容器 )
关联容器 set( 单重集合 ) multiset( 双重集合 ) map( 单重映射表 ) multimap( 多重映射表 )
容器适配器 stack( 栈 ) queue( 队列 ) prority_queue( 优先级队列 )
1 、顺序容器 ( 序列式容器 ) :每个元素都有固定位置 ------ 取决于插入时机和地点,和元素值无关,
vector 、 deque 、 list ;
vector : 将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取) ,
数组尾部添加或移除元素非常快速 O(1) 。但是在中部或头部安插元素比较费时 ; O(n)
List : 双向链表,不提供随机存取(按顺序走到需存取的元素, O(n) ) , 在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针 ;
Deque : 是double-ended queue的缩写,可以随机存取元素(用索引直接存取), 数组头部和尾部添加或移除元素都非常快速。但是在中部安插元素比较费时;
结语
以上就是STL基本知识,后续还会更新C++知识。
最后的最后,还请大家点点赞,点点关注,谢谢大家!