当前位置: 首页 > news >正文

【C++】编码表 STL简介:STL是什么,版本,六大组件,重要性以及学习方法总结

🔥艾莉丝努力练剑:个人主页

专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬艾莉丝的简介:


C++的两个参考文档

老朋友(非官方文档):cplusplus

官方文档(同步更新):cppreference



目录

一、编码表详解

1.1  编码的概念

1.2  ASCII码表(C语言)

1.3  string类

1.4  变长编码集

1.5  统一码/万国码

1.6  GBK——汉字内码扩展规范

1.6.1  双字节

1.6.2  乱码

二、STL简介

2.1  STL是什么?

2.2  STL的版本:原始版本+御三家

2.2.1  原始版本

2.2.2 “御三家”

P.J.版本

RW版本

SGI版本

总结

补充

2.3  STL的六大组件

2.3.1  六大组件

2.3.2  备注说明

2.4  STL的重要性(三个维度)

2.4.1  在笔试中

2.4.2  在面试中

2.4.3  在工作中

2.5  STL的学习

总结

本文完整代码

Test.cpp:

结尾


一、编码表详解

1.1  编码的概念

编码:值和符号的映射关联集合。

1.2  ASCII码表(C语言)

C语言里面学过的ASCII表——也是编码表,是美国人搞的他们文字编码表(0~127),是(char整型)在内存中的整型值。

1.3  string类

我们在cplusplus找不到string,这是为什么?

(PS:Containers是“容器”的意思)

这是因为string产生比STL要早,先设计的string这个类,后续的STL有参考string——所以STL会越学越快——string后面也参考STL做了一些修改,总之,string就是容器。

编码表:查询表。

basic_string:模版。

1.4  变长编码集

1.5  统一码/万国码

统一码/万国码是由统一码联盟开发的涵盖各国文字的编码表——unicode

unicode:卖给各国的商品化电脑——给各国用的编码表(小国没分)。

中国有自己的编码表——GBK,汉字编码表。

1.6  GBK——汉字内码扩展规范

“GB”就是“国标”。

小知识,GBK这个汉字包括中日韩汉字(自古以来受中华文化圈辐射影响的国家)。

1.6.1  双字节

双字节:2个字节来编码(Windows也支持GBK,因为中国市场占比大,所以支持汉化)。

1.6.2  乱码

设置的是GBK,读取用了其它的编码集,就会乱码——

这就是乱码,再看下图——


二、STL简介

2.1  STL是什么?

STL(standardtemplatelibaray-标准模板库):STL是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架

2.2  STL的版本:原始版本+御三家

2.2.1  原始版本

AlexanderStepanov、MengLee在惠普实验室完成的原始版本,本着开源精神,他们声明允许
任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原
始版本一样做开源使用。
HP版本——所有STL实现版本的始祖。

C++在1994年就已经成熟了,但是C++委员会却一直到1998年才发布C++的第一个正式大版本——C++98,正是因为惠普实验室(HP)的C++HP版本的发布,推迟了C++大版本标准的发行。

2.2.2 “御三家”

P.J.版本

P.J.Plauger开发,继承自HP版本,被WindowsVisualC++采用,不能公开或修改,缺陷:可读
性比较低,符号命名比较怪异。

RW版本

RougeWage公司开发,继承自HP版本,被C++Builder采用,不能公开或修改,可读性一
般(缺点)。

SGI版本

Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。我们后面学习
STL要阅读部分源代码,主要参考的就是这个版本。

总结

补充

GCC:g++(被认为是GCC的一个组件)、gcc。

2.3  STL的六大组件

2.3.1  六大组件

2.3.2  备注说明

1、仿函数:类似于开关,从前往后、从左往右...类似这种。

2、容器:其实就是数据结构

3、空间配置器内存池

4、算法:如swap(交换)、sort(排序)等直接在STL实现了的简单算法。

5、迭代器:遍历容器。

6、配接器也叫适配器,可以看到,配接器里面有Stack、Queue等数据结构。

2.4  STL的重要性(三个维度)

博主将从三个维度——笔试、面试、工作——来强调STL的重要性。

一般中大厂通过笔试后还有2~3轮面试,有的中小厂甚至没有笔试,直接进行面试。

2.4.1  在笔试中

笔试:20道选择(权重40%)+2~3道算法编程题(权重60%)。

选择题有可能这里考一道那里考一道,但一般还是偏技术性,不过这个还是和岗位挂钩,像测试开发/测试岗位会考一些和技术无关的题目,比如如何处理和开发人员的关系(人情世故)。

我们来看三道算法题——

JZ78 把二叉树打印成多行

JZ7 重建二叉树

JZ9 用两个栈实现队列

大家记住,招聘的本质:筛选符合企业需求的优秀人才

PS:“面试造火箭,工作拧螺丝”

2.4.2  在面试中

我们直接看面经就很明了了——

2.4.3  在工作中

网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层
的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

2.5  STL的学习

借用一位前辈大佬的话——

总结

正如前辈所言,学习STL的三个境界——


本文完整代码

Test.cpp:

#define  _CRT_SECURE_NO_WARNINGS  1
#include<iostream>
#include<string>
#include<algorithm>
#include<list>
using namespace std;//STL简介
// GBK——windows为了中国市场(比较大),汉化
//中文乱码
int main()
{char buff1[] = "abcA";buff1[0]++;char buff2[] = "艾莉丝努力练剑abc";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;
}

结尾

往期回顾:

【C++】模版语法基础:认识模版(初识篇)

 结语:创作不易,大家不要忘记给已经满头大汗的艾莉丝来个“一键四连”哦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

૮₍ ˶ ˊ ᴥ ˋ˶₎ა

http://www.dtcms.com/a/394130.html

相关文章:

  • show_interrupts函数的进一步解析及irq_desc结构体
  • Kafka面试精讲 Day 19:JVM调优与内存管理
  • 10.vector容器
  • Linux系统介绍
  • MFC中的CMFCDynamicLayout类的介绍
  • UniScene 统一驾驶场景 | 生成语义占据 | 生成多视角视频 | 生成激光点云 CVPR2025
  • Git 简明教程:从原理到实战
  • 【设计模式】中介者模式
  • nginx添加modsecurity插件
  • 代码上传Github:SSH法
  • 【iOS】AFNetworking初步了解及使用
  • JVM实战-G1参数调优
  • 超简单的视频分割脚本
  • 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)
  • 在 Windows 系统上安装官方 Codex CLI 教程
  • Redis 配置与优化全攻略
  • 二分查找左右边界写法
  • Oracle体系结构-Large Pool详解
  • Elasticsearch面试精讲 Day 19:磁盘IO与存储优化
  • 【AI智能体】Dify 搭建数据分析应用实战操作详解
  • Nginx localtion / 、/a、/a/ 的区别
  • 【C++】string的使用与模拟实现
  • 新手向 算法 希尔排序-yang
  • 如何用RAG增强的动态能力与大模型结合打造企业AI产品?
  • 黑马头条_SpringCloud项目阶段五:openFeign服务接入以及接入腾讯云内容安全服务实现文章提交违规信息自动审核
  • Spring、SpringBoot框架核心流程详解
  • 195. Java 异常 - finally 块:Java 中的“兜底侠”
  • C语言底层学习(2.指针与数组的关系与应用)(超详细)
  • 008 Rust注释
  • ubuntu防火墙开放端口