
🔥草莓熊Lotso:个人主页
❄️个人专栏:《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受。
🎬博主简介:

如果你是正在学习 C++ 的开发者,大概率听过两个 “绕不开” 的话题:一是 STL 库 —— 江湖传言 “不懂 STL,不算会 C++”,它能帮你跳过重复造轮子的坑,直接调用成熟的数据结构与算法;二是字符编码 —— 写代码时突然遇到的 “乱码”,多半是 ASCII、Unicode、GBK、UTF-8 没搞明白。这篇博客就从基础出发,一边带你吃透 STL 库的核心(版本、六大组件、学习路径),一边理清字符集之间的演化关系,帮你打通 C++ 开发的 “基础关卡”,不管是笔试面试还是实际项目,都能少走弯路。

--不同的编译器适配的STL版本也不同,搞懂差异能让我们使用起来更得心应手。
原始版本:
P.J. 版本:
RW 版本:
SGI 版本:
版本 | 开发者 / 机构 | 适配编译器 | 特点 |
|---|---|---|---|
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的三个境界就是:能用,明理,能扩展。
编码类型 | 核心特点 | 存储字节 | 覆盖字符范围 | 局限性 / 优势 |
|---|---|---|---|---|
ASCII | 最基础编码,仅含英文字母、数字、标点符号 | 1 字节(8 位) | 128 个字符 | 缺点:无法存储中文、日文等非英文字符,早期软件乱码原因之一;优势:简单基础 |
GBK | 为解决中文存储的 “国家标准编码”,兼容 ASCII | 英文字符 1 字节,中文 2 字节 | 简体中文、繁体中文等 | 缺点:地域性强,仅在中文场景适用,跨语言易出问题;优势:解决中文存储问题 |
Unicode | “统一字符集”,为全球所有语言字符分配唯一编码值 | 若直接存储,所有字符用 4 字节 | 全球所有语言字符(中文、英文、日文、符号等) | 缺点:直接存储会浪费大量空间(英文字符只需 1 字节却占 4 字节);优势:覆盖全球字符 |
UTF - 8 | Unicode 的 “存储方案”,目前最主流编码 | 可变长存储(英文字符 1 字节,中文 3 字节,生僻字符更多字节) | 全球所有语言字符 | 优势:兼顾 “全球字符覆盖” 与 “存储效率”,完美解决 ASCII 的局限和 Unicode 的存储浪费问题 |
代码演示:(大家可以自己下去运行调试看看)
int main()
{
char buff1[] = "abcA";
buff1[0]++;
char buff2[] = "草莓熊Lotso";
cout << sizeof(buff2) << endl;//
buff2[1]++;
cout << buff2 << endl;
buff2[1]++;
cout << buff2 << endl;
buff2[3]++;
cout << buff2 << endl;
buff2[3]++;
cout << buff2 << endl;
return 0;
}对比维度 | UTF-8 | UTF-16 | UTF-32 |
|---|---|---|---|
编码方式 | 可变长(1-4 字节) | 可变长(2 字节为主,辅助字符 4 字节) | 固定长(始终 4 字节) |
空间占用 | 英文 1 字节(省空间),中文 3 字节 | 基本字符 2 字节(适中) | 所有字符 4 字节(较浪费) |
核心优势 | 兼容 ASCII,网络 / 文件传输主流 | 基本字符处理效率高 | 字符定位 / 操作最简单高效 |
典型应用场景 | 网页、Linux 系统、邮件、代码文件 | Windows 系统、Java/.NET 虚拟机 | 高要求字符处理库、特定算法场景 |
补充资料:



往期回顾:
《从崩溃到精通:C++ 内存管理避坑指南,详解自定义类型 new/delete 调用构造 / 析构的关键逻辑》
别再用函数重载堆代码了!C++ 模板初阶教程:原理 + 实例 + 避坑,新手也能秒懂
结语:STL 是 C++ 的 “效率工具”,字符编码是开发的 “避坑基础”,两者学好能少走很多弯路。刚开始不用追求精通,先会用 STL 做开发、记牢 UTF-8 主流地位,后续再逐步深入。觉得有用欢迎点赞收藏,可以在评论区聊聊你用 STL 踩过的坑或编码解决技巧,一起进步!
✨把这些内容吃透超牛的!放松下吧✨ ʕ˘ᴥ˘ʔ づきらど