前言:
在学习识的过程中,我们难免会使用一些权威的文档来查阅一些知识来确保学习的正确性,这里推荐一下本人一直都在使用的网站:cplusplus.com 文章所呈现的函数原型均来自于此网站。
接下来将通过下面的内容来介绍一下标准库中string类的使用,希望能够给大家带来收获,欢迎大家提问和指正问题。
文章摘要:
本文介绍STL中string类的各个接口的功能与使用,包括string类容器的介绍、容器中的构造函数、赋值操作、容量和大小、数据的获取、三种遍历容器的方法、插入和删除有关的操作等等。
关于string的介绍
string是c++标准库中一个模板类,具有强大的处理字符串的能力,相对于c语言来说字符数组来说,使用标准库的string更加的便利和安全。
string中的构造函数
string中的构造函数分为以上七种,分别为默认构造、拷贝构造、子字符串构造、通过c字符串进行构造、c字符串字串构造、填充构造、和迭代器范围构造,接下来我们将一一介绍
默认构造:
默认构造就是实例化出来一个空字符串
拷贝构造:
通过一个已经实例化出来的对象进行赋值给自身,实现实例化
子字符串构造:
将已经实例化出来的string类的对象str,从str中的pos位置开始拷贝len个字符给自身,其中len具有缺省值npos,npos=-1,npos是无符号整形,故这里如果未进行传参,使用缺省值npos,则会从str中的pos位置一直拷贝到字符串结束,当传的len大于字符串长度的值时,也会从str中的pos位置一直拷贝到字符串结束
通过c语言字符串进行构造:
通过传字符串进行实例化
c字符串字串进行构造:
将字符串的前n个元素进行赋值实例化
填充构造:
将n个字符'c'进行赋值构造
迭代器范围构造:
从 first 位置开始,到 last 位置的元素进行初始化
赋值操作
关于以上两个赋值操作,实际功能是差不多的,考虑便捷性,我们通常使用operator=,assign作为了解即可
operator =
通过string 类进行赋值
通过c语言字符串进行赋值
通过字符进行赋值
assign
assign的函数模型中的函数参数和我们上面的构造函数初始化基本一样,在这里也就不在进行过多解释,上代码
容量和大小
size()
size函数的返回值类型是size_t,返回值反应的是字符串的长度。
length()
和size函数并无任何不同,返回值类型和返回值的含义都与size相同
这里我们会想,既然他们都相同,那么为什么不能会出现这俩个呢?这里是由于c++中的类起源于c语言的字符串处理,这是length()就已经出现了,随着后续STL标准库的诞生,size()也随之诞生,并且语言都是向上兼容,所以说二者就共同存在了
-
capacity()
计算字符串的容量
探究一下vs下的字符串扩容规则
通过代码统计的结果,我们可以大概粗略觉得vs是通过类似1.5倍扩容进行的,刚开始就开了16个个bite为其中最后一个用于存放'\0'。
-
empty()
判断字符串是否为空,如果为空则返回ture,否则返回false
-
resize()
将字符串的大小调整为n
如果n>size(),如果传入字符c,则将字符串从末位开始用字符c进行填充到n;如果没有传入字符c则用'\0'进行填充
如果n<size(),则直接删除字符串n之后的数据
-
reserve()
如果n>capacity(),则将容量扩充至n,否则不做任何处理
容器数据的获取
-
operator[ ]
-
at
对于string容器,由于存储数据都是连续的,我们通常都是通过下标进行访问。
at 作为了解即可,很少能够用到
对于c++11新支持的 front 和 back 分别是获取string容器中的首个元素和末位元素,这些功能下标访问依旧能够满足,因此也很少去使用,稍作了解即可
迭代器
迭代器是非常重要的,通过迭代器可以构造函数(上文演示过),通过迭代器可以访问容器中的元素(下文会提及),迭代器不仅在string中非常重要,在整个STL中都非常重要。在c++11中范围for底层也是通过调用迭代器进行实现的。
begin()
返回一个迭代器,该迭代器指向字符串中首个元素的位置,如果是const修饰的则返回const迭代器
end()
返回一个迭代器,该迭代器指向字符串中末位元素的下一个位置,也就是'\0'的位置。如果是const修饰的则返回const迭代器
rbegin()
该函数返回一个反向迭代器,该反向迭代器指向字符串中最后一个元素的位置。如果是const修饰的则返回const迭代器
rend()
该函数返回一个反向迭代器,该反向迭代器指向的位置是第一个元素之前的位置。如果是const修饰的则返回const迭代器
遍历string容器的三种方法
插入和删除
插入
-
push_back:
在字符串末位进行尾插字符 ' c ', 注意push_back每次插入只能插入单个字符。
-
append:
在字符串末尾进行字符串的尾插,类似于字符串的拼接
+=:
通过上面push_back 和 append 的理解并使用,不免有一丝惆怅,一个字符串尾插函数竟然设有这么多接口,这怎么能够记得住??? 没关系,当我们了解+=之后我们脸上就可以继续洋溢着快乐的笑容了,因为+=可以实现90%尾插的各种情况,并且接口非常的简单
是不是很爽!!!
- insert:
通过上面的了解尾插我们已经了解了,但是这往往不能够满足我们的需求,我们需要的有时不仅仅是尾插,有时候任意位置的插入才是我们所需要的
删除