C++学习笔记——STL模板
一、C++STL模板
(一) 基本概念#
1. STL#
标准模板库(Standard Template Library,STL)
是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要表出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
STL由六大组件组成:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
组件 | 描述 |
---|---|
容器 | 容器是用来管理某一类对象的集合(数据结构),如链表,栈,队列,散列表等。 |
算法 | 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 |
迭代器 | 迭代器 用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 |
仿函数 | 一个类的使用看上去像一个函数,有了类似函数的行为。 |
适配器 | 一种用来修饰容器或者仿函数或迭代器接口的东西。 |
空间配置器 | 负责空间的配置与管理。 |
容器和算法通过迭代器无缝衔接
2. 容器#
C++容器可分为序列式容器和关联式容器
-
序列式容器:其中的元素以线性排列,容器不会自动对存储的元素排序。
- 例:vector、list、deque等
-
关联式容器:每组数据(每个数据)都有一个键值(key)和一个实值(value)。键作为值的索引。
- 例:set、map等
注:关联式容器的底层实现是平衡二叉树,以便获得良好的搜索效率。
3. 算法#
算法分为质变算法和非质变算法。
-
质变算法:是指运算过程中会更改区间内的元素的内容。
例:拷贝,替换,删除等等
-
非质变算法:是指运算过程中不会更改区间内的元素内容。
例:查找、计数、遍历、寻找极值等等
4. 迭代器#
STL的中心思想在于将容器和算法分开,彼此独立设计。迭代器(iterator)提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。可理解为元素的指针。
迭代器的分类:
迭代器 | 功能 | 描述 |
---|---|---|
输入迭代器 | 提供对数据的只读访问 | 只读,支持++、==、!= |
输出迭代器 | 提供对数据的只写访问 | 只写,支持++ |
前向迭代器 | 提供读写操作,并能向前推进迭代器 | 只读,支持++、==、!= |
双向迭代器 | 提供读写操作,并能向前和向后操作 | 读写,支持++、-- |
随机访问迭代器 | 提供读写操作,并能以跳跃的方式访问容器的任意数据,是功能最强的迭代器 | 读写,支持++、--、+n、-n、<、<=、>、>= |
(二) 应用#
-
STL实现了数据结构和算法的分离,使得STL非常通用。
-
STL具有高可重用性,高性能,高移植性,跨平台等优点
-
在C++标准中,STL被组织为下面的13个头文件:
、 、 、 、 、 - 、
-
程序员可以不用思考 STL 具体的实现过程,只要能够熟练使用 。这样可以把精力放在程序开发的别的方面。
-
STL 是 C++ 程序员的一项不可或缺的基本技能
参考链接:https://blog.csdn.net/m0_58086930/article/details/122466500
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本