C++第十五弹---string基本介绍(一)

2024-04-09 1301阅读

C++第十五弹---string基本介绍(一)

 ✨个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】

目录

1、什么是STL

2、STL的版本

3、STL的六大组件

4、STL的重要性

5、如何学习STL

6、STL的缺陷

7、为什么学习string类

7.1、C语言中的字符串

7.2、两个面试题

8、标准库中的string类

8.1、string类

8.2、在文档中查找string相关知识

总结


讲解string之前需要先讲解STL,因为string类属于STL的一部分。

注意:学习STL看文档非常重要,建议使用cplusplus网站,博主后续使用的网站也是cplusplus。

1、什么是STL

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

2、STL的版本


原始版本

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


P. J. 版本

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


RW版本

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

3、STL的六大组件

容器(Containers):各种数据结构,如 vector、list、deque、set、map 等。从实现的角度来看,容器是一种类模板。
算法(Algorithms):各种常用算法,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作,比如 sort、search、copy、erase。从实现的角度来看,STL 算法是一种函数模板。
迭代器(Iterators):迭代器用于遍历对象集合的元素,扮演容器与算法之间的胶合剂,是所谓的“泛型指针”,共有 5 种类型,以及其他衍生变化。从实现角度来看,迭代器是一种将 operator*、operator->、operator++、operator-- 等指针操作予以重载的类模板。所有的 STL 容器附带有自己专属的迭代器,因为只有容器设计者才知道如何遍历自己的元素。
仿函数(Functors):也称为函数对象(Function object),行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了 operator() 的 类 或者 类模板。
适配器(Adaptors):一种用来修饰容器或者仿函数或迭代器接口的东西。例如 STL 提供的 queue 和 stack,就是一种空间配接器,因为它们的底部完全借助于 deque。
分配器(Allocators):也称为空间配置器,负责空间的配置与管理。从实现的角度来看,配置器是一个实现了动态配置空间、空间管理、空间释放的类模板。

C++第十五弹---string基本介绍(一)

暂时对于STL的六大组件了解即可。 

4、STL的重要性


1. 在笔试中

 

二叉树层序打印C++第十五弹---string基本介绍(一)https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288?tpId=13&tqId=11213&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

重建二叉树C++第十五弹---string基本介绍(一)https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

2. 在面试中

C++第十五弹---string基本介绍(一)
3. 在工作中

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

5、如何学习STL


C++第十五弹---string基本介绍(一)

 简单总结一下:学习STL的三个境界:能用,明理,能扩展 。

6、STL的缺陷

1. STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。

2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。

3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。

4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

7、为什么学习string类

7.1、C语言中的字符串

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想(核心封装继承多态),而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

7.2、两个面试题

1、

把字符串转化为正数C++第十五弹---string基本介绍(一)https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/description/2、

字符串相加C++第十五弹---string基本介绍(一)https://leetcode.cn/problems/add-strings/description/

在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

8、标准库中的string类

8.1、string类

字符串cplusplus文档介绍C++第十五弹---string基本介绍(一)https://cplusplus.com/reference/string/string/?kw=string

1. 字符串是表示字符序列的类。

2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。

3. string类是使用char类型(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string))。

4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。

5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

总结:

1. string是表示字符串的字符串类。

2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。

3. string在底层实际是:basic_string模板类的别名,typedef basic_stringstring。

4. 不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std。

8.2、在文档中查找string相关知识

重要的事情说三遍,学习C++的容器必须有查阅文档习惯,即开头说的cplusplus网站,也可以使用en.cppreference网站,两个网站都可以,博主推荐前面一个,因为访问速度更快。

那么知道使用哪个网站查文档之后,实际我们怎么操作呢?以下通过图片加文字进行讲解。

1、进入cplusplus网站

C++第十五弹---string基本介绍(一)

在浏览器搜索网址,看到这个界面说明第一步没有问题,成功进入了网站。

2、方式一:

找需要查找的容器或者库函数,有两种方式,第一种通过搜索,但是新版本不支持搜索功能,因此需要进入旧版网站,点击上图中右上角的Legacy version,即可进入旧版网站。界面如下图:

C++第十五弹---string基本介绍(一)

需要查找什么内容,直接搜索即可。 

方式二:

点击第一张图片左上角的Reference(参考),进入即可看到Standard C++ Library reference(C++标准参考库),其中有C语言库,容器等知识。

C++第十五弹---string基本介绍(一)

 需要什么内容依次往下翻,看是否是自己想要的内容。string在Miscellaneous headers中(最下面)。

搜索看到的界面如下图:

C++第十五弹---string基本介绍(一)

总结

本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]