STL的基础
为什么会有这篇文章呢?一是为了整理自己的思路,形成一个体系化的思路,加深自己的对知识的印象。二是方便后续的查看,避免后期有些细节忘记的时候找不到对应的章节。
STL 是什么
STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成输入/输出、数学计算等功能。在 1998 年被定为国际标准,正式成为 C++ 程序库的重要组成部分,现在已经被内置到支持c++的编译器中,无需额外安装。
以头文件形式提供:STL 是 C++ 标准库的一部分,通过无扩展名的头文件(如
<vector>、<algorithm>)引入,无需额外安装,现代 C++ 编译器已内置 。
能干什么
STL主要包含6个部分容器、迭代器适配器、容器适配器、分配器、函数对象、算法,其中所包含的方法提高了代码复用性和开发效率,在掌握 STL 后,开发者可以快速实现复杂数据结构和算法,不必重造轮子。那么到底有什么用呢,让我们用容器来举个栗子。 如果我们要写一个数组,如果用普通的c++写法是这样的。
int a[n];
//或者这样的
int *p = new int[n];
这种方式会根据变量n来提前确定内存占用的空间大小,避免存贮造成浪费,但在一些场景下,我们可能无法预估所需要存储空间的大小,如果存贮空间不够的话,我们则需要重新去申请更大的空间。
//申请比n更大的内存,能放下多的部分
int * temp = new int[bigN];
//将原内存空间的数据全部复制到新申请的内存空间中
memecpy(temp, p, sizeof(int))n);
//将原来的堆空间释放
delete [] p; p = temp;
完成相同的操作,如果采用 STL 标准库,则简单很多,下面是使用序列式容器中的 list 实现以上功能的示例。
list <int> a;
int b=1;
a.push_back(b);
//手动调整大小
a.resize(100);
对比以上两种使用数组的方式不难看出,使用 STL 可以更加方便灵活地处理数据。所以,大家只需要系统地学习 STL,便可以集中精力去实现程序的业务功能,而无需再纠结如何用代码实现,从而实现了敏捷开发。
送给童鞋们的话
综上所述,STL 不仅是 C++ 标准库中高效、可靠、泛型化的基石,更是现代 C++ 开发者提升编码质量与开发效率的利器。它将数据结构(容器)、访问方式(迭代器)、操作逻辑(算法)与内存管理(分配器)有机统一,辅以函数对象与适配器增强灵活性,真正实现了“一次编写、多处复用”。掌握 STL,不只是学会几个容器或算法的用法,更是理解泛型编程思想、培养工程化思维的过程。后续章节将围绕六大组件逐层深入,结合实战示例与常见误区,助你从“会用”走向“精通”。愿你在 STL 的世界里,写得更少,做得更多,思考得更深。