C++ STL string类全面指南:从编码历史到实战应用
、STL的版本
C++语言在1994年已经趋于成熟,但第一个官方大版本直到1998年才正式发布。这其中的一个关键原因是STL(标准模板库)的出现。原始STL版本由Alexander Stepanov和Meng Lee在惠普实验室(HP版本)开发,本着开源精神,允许自由使用和修改。但为了将STL纳入C++标准库,并确保其稳定性,C++标准委员会花费了时间进行整合和改进,因此发布推迟了4年,最终在1998年将STL作为C++标准库的核心部分。
随着STL的普及,多个衍生版本应运而生,并被不同编译器采用:
- P.J.版本由P.J. Plauger开发,继承自HP版本,被Windows Visual C++采用,但因其封闭性和可读性较低,主要局限于Windows平台。
- RW版本由Rouge Wage公司开发,同样源于HP版本,被C++ Builder采用,但也不可公开修改。C++ Builder这类编译器在与微软Visual Studio的竞争中逐渐销声匿迹,反映了当时编译器市场的变迁。
- SGI版本由Silicon Graphics公司开发,同样基于HP版本,被GCC(GNU编译器集合)采用,尤其在Linux系统中广泛使用。GCC通常被视为G++的统称,而G++是GCC中用于C++编译的组件。SGI版本的可移植性和可读性高,成为学习STL源代码的重要参考。
总之,STL的发展不仅影响了C++标准的发布时机,也通过不同版本的集成推动了编译器的演化,其中GCC(通过SGI版本)在开源领域占据了重要地位。
三、STL的六大组件
STL在实践的过程中被分为六大组件(类别)

在这里插入图片描述
四、为什么学习string类
4.1 C语言中的字符串
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问
在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数
五、标准库中的string类
5.1 string类的历史地位与STL关系
在使用string类时,必须包含#include头文件以及using namespace std;

在这里插入图片描述
可以看到string不在容器之中,严格来说string不在STL库中,它在C++相关的标准库部分

在这里插入图片描述
有兄弟就说不对呀?前面不是把string归类到STL容器里了吗?
这其中有一些历史的发展原因,因为string产生的比STL早,C++标准委员会创建的string类就在标准库中,其后STL这些容器的设计也参考了string的设计,这里string的归类是历史的原因。string在后续的修改也参考了STL的设计,但是string在使用的功能和设计的风格来说,它和容器几乎一样,所以后面把string归到容器
5.2 basic_string模板家族
C++标准库中的字符串类型std::string实际上是通过一个名为basic_string的类模板进行类型定义得到的。具体来说,std::string是basic_string< char >的别名,专门用于处理单字节字符。除了常用的string类型,C++还提供了basic_string模板的其他特化版本,以支持不同字符宽度和编码需求。例如,std::wstring用于宽字符(通常为wchar_t,在Windows平台中一般为2字节,在Linux平台中通常为4字节),以及C++11标准引入的std::u16string和std::u32string,分别用于处理UTF-16和UTF-32编码的字符,对应的字符类型为char16_t(2字节)和char32_t(4字节)
更多推荐
所有评论(0)