STL 库:C++ 开发者的效率神器
什么是 STL
STL(Standard Template Library)是 C++ 标准库的重要组成部分。它不仅仅是一个可复用的代码组件库,更是一个包罗数据结构与算法的软件框架。使用 STL 能帮助我们快速实现复杂功能,避免像 C 语言时代那样重复实现底层逻辑。
主流 STL 版本对比
不同的编译器适配的 STL 版本也不同,了解差异能让使用更得心应手。
- HP 版本:由 Alexander Stepanov 和 Meng Lee 在惠普实验室完成,是所有 STL 实现的始祖。开源免费,允许修改与商业使用。
- P.J. 版本:由 P.J. Plauger 开发,被 Windows Visual C++ 采用。闭源不可修改,可读性较低,符号命名较为怪异。
- RW 版本:由 Rouge Wage 公司开发,被 C++ Builder 采用。同样闭源,可读性一般。
- SGI 版本:由 Silicon Graphics 公司开发,被 GCC(Linux 环境)采用。可移植性强,支持公开、修改甚至贩卖。从命名风格和编程风格来看,可读性极高。后续学习 STL 并阅读部分源代码时,主要参考的就是这个版本。
| 版本 | 开发者 / 机构 | 适配编译器 | 特点 |
|---|---|---|---|
| HP 版本 | Alexander Stepanov、Meng Lee | - | 所有 STL 版本的'始祖',开源免费 |
| P.J. 版本 | P.J. Plauger | Windows Visual C++ | 闭源不可修改,可读性低 |
| RW 版本 | Rouge Wage 公司 | C++ Builder | 闭源不可修改,可读性一般 |
| SGI 版本 | Silicon Graphics | GCC(Linux) | 推荐学习版本!可移植性强、开源 |
STL 六大组件
STL 主要由容器(Containers)、算法(Algorithms)、迭代器(Iterators)、函数对象(Function Objects)、适配器(Adapters)和分配器(Allocators)这六大组件构成。虽然细节繁多,但掌握它们的核心思想足以应对大部分开发场景。
为什么一定要学 STL
1.4.1 笔试面试刚需
笔试常考用 STL 实现数据结构(如两个栈实现队列)以及其它算法题高频使用 STL 库,面试中 STL 的相关知识也是考察的重点。熟练运用 STL 是区分'新手'与'合格开发者'的重要标志。
1.4.2 工作效率和个人能力
网上有句话说:'不懂 STL,不要说你会 C++'。STL 是 C++ 中的精华,在工作中也能帮助我们快速提高效率。
STL 学习的三大境界
学习 STL 大概可以分为三个境界:能用、明理、能扩展。刚开始不用追求精通,先会用 STL 做开发,后续再逐步深入源码原理。
字符编码:从乱码到清晰
为什么需要字符编码
计算机只认识'0'和'1',字符编码简单来讲就是将人们可读的字符转换为二进制的规则。这其中不同的编码存在一些差异,但是本质上来说都是差不多的。
四种常用的编码:区别与联系
- ASCII:最基础的编码,仅包含英文字母、数字、标点符号,用 1 个字节(8 位)表示,能表示 128 个字符。缺点明显——无法存储中文、日文等非英文字符,这也是早期软件出现乱码的原因之一。
- GBK:为解决中文存储而生的'国家标准编码',兼容 ASCII(英文字符用 1 字节),中文用 2 字节表示。缺点是'地域性强',仅在中文场景适用,跨语言时易出问题。


