C++中的STL是什么?

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++知识。

最后的最后,还请大家点点赞,点点关注,谢谢大家!

 

 

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值