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

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

 

 

相关推荐

  1. C++STL什么

    2024-04-15 09:12:02       38 阅读
  2. SQL游标什么

    2024-04-15 09:12:02       21 阅读
  3. c语言什么

    2024-04-15 09:12:02       29 阅读
  4. SQLDML、DDL以及DCL什么

    2024-04-15 09:12:02       56 阅读
  5. sqllag()和lead()什么意思

    2024-04-15 09:12:02       36 阅读
  6. c语言宏指什么

    2024-04-15 09:12:02       44 阅读
  7. C语言弱函数什么

    2024-04-15 09:12:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 09:12:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 09:12:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 09:12:02       82 阅读
  4. Python语言-面向对象

    2024-04-15 09:12:02       91 阅读

热门阅读

  1. Rust开发笔记 | IDE选择与Rust工具链配置指南

    2024-04-15 09:12:02       42 阅读
  2. 格式化字符串漏洞学习笔记

    2024-04-15 09:12:02       38 阅读
  3. Arduino IDE开发esp8266,如何调试

    2024-04-15 09:12:02       38 阅读
  4. Android Activity 启动涉及几个进程

    2024-04-15 09:12:02       38 阅读
  5. Anaconda在Ubuntu下的安装与简单使用

    2024-04-15 09:12:02       105 阅读
  6. 使用 Lua 协程处理异步回调函数

    2024-04-15 09:12:02       129 阅读
  7. xss常用标签和触发事件

    2024-04-15 09:12:02       36 阅读
  8. SpringBoot启动加载自己的策略类到容器中使用?

    2024-04-15 09:12:02       114 阅读
  9. Python和R概率统计算法建模评估气象和运动

    2024-04-15 09:12:02       89 阅读
  10. Qt实现Kermit协议(六)

    2024-04-15 09:12:02       42 阅读
  11. IDE:常见的集成开发环境

    2024-04-15 09:12:02       200 阅读
  12. C语言数组的初始化方法大全

    2024-04-15 09:12:02       34 阅读