目录
前言
大家好呀!我是爱敲代码的小🐟儿。
从今天起,我就要正式开始学习c++的stl库了。学习呢自然不能光看别人写的,自己也要尝试动手写写,于是我打算将我学的知识以笔记的形式记录下来,方便大家共同学习😊
STL是什么?
先上个很官方的定义:STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
怎么样,是不是没听懂,其实官方的我也没看太懂😅。咱先看一张图!
通常认为,STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的,它们各自的含义如表 1 所示。
STL的组成 | 含义 |
---|---|
容器 | 一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。 |
算法 | STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部分位于头文件 <numeric> 中。 |
迭代器 | 在 C++ STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。 |
函数对象 | 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。 |
适配器 | 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。 |
内存分配器 | 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。 |
对于我们初学者来说,STL的具体结构我们只用了解就行,比较对于我们大多数人来说,我们会用stl便捷的刷题就行,我们其实不太需要搞懂stl背后的复杂原理,嘻嘻🤣😂😍。
不管stl中还是有两个概念需要我们稍微理解一下的——容器和迭代器😅
- STL容器就是将运用最广泛的一些数据结构实现出来。容器用来管理某类对象。常用的数据结构:数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map)。(其实,容器就是类似数组的单元,可存储 若干个值,且STL容器是同质的,即存储的值类型相同)
- 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;
可能你对这些概念还不是太理解,没关系以后在STL中我们经常会用到它们的,在用的过程中你对这些容器和迭代器慢慢就会有深刻的理解的。