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++知识。
最后的最后,还请大家点点赞,点点关注,谢谢大家!