C++ string类
STL
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架
string类
为什么要学习string类
string其实就是一个字符串的类,但是由于C语言中的字符串中提供了很多函数,这些函数又是和字符串是分不开的,又不太符合面向对象的要求,而且底层需要自己来管理,十分麻烦,所以C++提供的自己的string类
string类的函数
C++的库函数里面也是为string类提供了很多函数,大概有100多个,但是这100多个也不是每一个函数都会经常使用,我们只是挑几个重要的来讲
构造函数和输入输出流重载函数
上面展现了好几个构造函数,但是只是需要掌握几个函数就行了
下面的几个函数只需要了解就行了
(1)
从一个string类的第pos个位置开始,拷贝npos个元素到另一个string类里面去,如果npos不写或者大于当前要被拷贝的string嘞里面从pos开始,到string类结尾的个数,就拷贝全部
构造n个相同的字符
遍历
遍历方法1
运用这个可以遍历字符串,还可以修改,就像C语言中的数组一样
这两个函数都是返回string类的长度的,这两者是没有区别的,length只是因为沿用C语言而保存下来的,引用了STL之后, 为了兼容,这才又引用了size
遍历方法2
begin()函数是返回string的头一个元素的迭代器,end是返回最后一个元素的下一个元素的一个迭代器类型,至于什么是迭代器,这个阶段就把他想像成为一个指针就可以了
大家一定注意到了刚才上面的begin和end函数了吧,他们两个函数都分别重载了两个函数,前面都加上了const关键字,下面,是他们的使用场景
但是问题来了,为什么上面要写成const_iterator,中间要加一个下划线,不直接写成const iterator不加下划线的嘞
原因如下:不加下划线表示iterator类型的变量不能改变,在这里就是it1不能改变,那你还怎么遍历数组,加了下划线表示指向的内容不可以被改变,也就是*it1不能被改变
遍历方法3
范围for
其实范围for的底层也是迭代器,是把s1里面的每一个元素取出来,赋值给e,自动++,自动判断是否达到结束条件,这时候对e进行改变是不会改变s1的,比如下面的程序
如果想要改变s1的话,需要在e的前面加上一个&,也就是取一个别名,比如下面的程序
这时候s1也被改变了
倒叙遍历
rbegin指向的是string的最后一个元素,rend指向的是string的第一个元素 的前一个元素
rebgin++是向前走,也就是向rtend的方向走,下面是他们的使用例子
关于前面又const的就不用谈了,和前面的一样
插入元素
(了解就行了)
运行结果
(了解即可)
在后面插入一个元素
记住,这个元素只可以插入一个字符,其他的都不行
(下面的这个重点掌握)
这个函数和上面的两个函数实现的功能都是一样的,都是在string的后面插入一个字符串或者一个字符,或者一个string类别的,但是这个方便得多
这个比上面得两个函数简便的多
assign函数(这个函数也不重要)
函数实现的功能可以理解为将原来string里面的内容替换成为别的内容
insert函数
在pos位置插入字符或者字符串
关于string类
string既然是一个类的话,那么这个东西必然又他的成员变量,那他的成员变量有哪些嘞?让我们来看看吧
从上面中发现,string中的成员变量有:
size:元素个数
capacity:该string的容量
一个指针:该指针中有一个_buf数组的东西,当元素个数比较小的时候,元素就是存储在里面的,但是当元素个数比较多的时候,是存在另一个指针里面的
(这里我们在之后的博客中会写到),目前还不知就只需要在VS中是这样,不同的平台是不一样的
删除数据
replace
将下标从5开始的两个字符用ha代替,会看文档就行
STL的算法-sort
第一个参数指向的是第一个元素,第二个参数是最后一个,对与string进行排序的话就是按照字典序来排,也就是我们所说的ASCI码来排
这个函数还可以对任意区间进行排序
好了,以上就是今天的全部内容
原文地址:https://blog.csdn.net/lihaolihao111111/article/details/142218175
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!