| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++】STL:string类 -> 正文阅读 |
|
[C++知识库]【C++】STL:string类 |
这是接触STL的第一篇博客,让我们以 1.何为STLSTL是C++标准库的重要组成部分,其作用是为绝大多数数据结构提供轮子,是一个包罗了数据结构和算法的软件框架。 在之前C语言的数据结构专栏中,顺序表、链表等等都是需要我们自己造轮子来实现。但在C++中,有STL就好比站在了巨人的肩膀上,可以走的更远。当我们需要使用这些内容时,无需自己重新造轮子,从而大大提高了开发效率。 1.1 STL版本这里我直接贴一个C语言中文网的链接👉【点我】 里面详细介绍了STL发展历程中出现的几个版本,其中SGI因为被Linux的GCC所使用,可移植性高。之后的博客主要是学习 1.2 STL组成同样是C语言中文网的资料👉【链接】,我将它整理为了下面这个思维导图 在面试中,STL的内容也是HR经常考察的。所以我们一定要认真学习这一部分的知识点! 1.3 STL的一些吐槽如果你去Cplusplus网站上看过STL库的接口,你就会发现STL库的设计有些复杂。有很多地方都考虑的过于细致,导致函数接口非常多,想要全记住这些接口是有些困难的 当然,这也是我自己太菜了的缘故。或许以后用的多了,这些就理所应当的记住了吧。 同时,因为STL使用了模板,所以当你多次使用STL时(比如vector容器)就容易出现代码冗余
2.String
string类是表示字符串的字符串类,该类的接口和常规的容器基本相同,并添加了一些专门用于操作字符串的常规操作。使用string需要包含
下面介绍一些常用的string类函数接口,标题中的英文和 2.1 编码格式在 什么是编码格式呢?在编程学习中,比较常用的便是 ASII码表中,英文单词、数字、各类标点符号都有它们对应的值,这样才能在只支持 我们知道,英文中的基础只有26个单词,算上大小写也就52个。但是我们中华文化博大精深,计算机需要显示中文的时候,一个char类型的空间已经不够。所以我们需要整出一个我们自己的编码格式,以此让计算机支持显示中文—— GBK使用两个字节来存储一个汉字,一些不常用的生僻字可能需要3-4个字节来存储。 用下面这个简单的函数来测试,我们可以发现,中文中谐音字的编码是相近的 在网络上,我们打某些词汇会被替换成
string类有非常多的接口,我们并不需要完全掌握所有的函数接口。只需要学会常用的接口,在遇到一些不常用的,在需要使用的时候可以去查找cplusplus的文档。 2.2 构造函数(constructor)下面是一些常用的string类的构造函数
除此之外,在文档中我们还可以看到更多构造函数 除此之外,我们还可以调用赋值操作符进行构造。下面是赋值重载的3个版本,想必都能看懂,是通过对象、常量字符串和字符进行赋值操作。 string类中也重载了流提取和流插入操作符,方便我们直接对对象进行输入输出操作。 我们还可以选取一个范围进行构造,比如下面这个 需要注意的是,该构造函数的第三个传参有缺省值
查文档可以看到, 2.3 析构函数(destructor)析构函数有个好处,就是编译器自己会进行调用,我们只需要简单了解即可。 2.4 遍历string对象我们可以通过下面的3种方式来遍历一个string对象
可以看到这三个方式都成功打印出了s1对象的完整内容 其中范围for编译器在操作的时候是用迭代器来实现的,这一点通过查看汇编可以看出来 2.5 operator[]和at(Element access)上面我们用到了
at函数的使用方式和 区别就是,当 而 2.6 正向和反向迭代器Iterators除了在
这里需要注意的是,虽然这个迭代器是反向的,但是我们使用的时候,依旧会 注意,基本的迭代器是可读可写的。在string里面还实现了const的迭代器
如果你觉得这样写太麻烦,而且容易记不住。可以让
C++11中,为了和基本的方式进行区分,新增了以c为前缀的4个迭代器。其使用和 2.7长度和容量操作Capacity2.7.1 size和length这其中size和length的功能完全相同。只是早期string设计的时候以 2.7.2 resize和reserve
我们可以通过 但在实际应用中,当字符串的容量快要写满的时候,程序会自动进行扩容,大概是1.5倍 而
通过调试可以发现,这里会把size修改为100,并将多余内容全部初始化为0 我们还可以给 同时,这两个函数一般都不会对容量进行缩容 但是 需要注意的是,在VS2019中(不同编译器可能不一样),reserve如果传参小于15,则会对容量进行缩容到15(string对象默认会开辟15个字节的capacity) 2.8修改内容(Modifiers)string可以通过很多方式来增加、删除内容 2.8.1 尾插它们的基本使用如下,其中最方便的肯定是 2.8.2 中间插入string并没有提供一个头插的选项,而是提供了一个
2.8.3 删除可以通过erase函数删除数据
这个很容易理解,在这里就不做演示了 2.8.4 替换这个函数使用并不频繁,其修改操作不如使用拷贝复制😂 比如其中第二个函数的作用是将 2.8.5 交换在string类中有一个交换函数,同时,std标准库里面也有一个交换函数
所以string类里面的swap函数在处理对象的时候,比标准库里面的swap效率会高一些 2.9字符串操作(String operations)2.9.1 c_str这个接口的作用是返回一个字符串的指针,其主要是为了和C语言的一些函数对应,比如利用 2.9.2 find这里可以看到非常多种类的查找函数(偷懒不写示例了)
有些时候我们需要查找的内容并不是从头开始的,所以就需要从尾部开始找。
2.10 很多操作符重载string里面有非常多的操作符重载,支持和字符串、字符、对象进行大小对比。虽然看的有点麻了,但实际上它们只是方便我们使用。底层实现了解一下就可以了(我这是不是废话…) 其实一部分内容都是可以通过编译器的隐式类型转化或者临时构造一个string类来实现的,但是设计string的大佬们显然觉得多即是好,哈哈。 3.等待补充……关于 如果有什么新增内容的话,我会对本篇博客进行修改
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:59:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |