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的就不用谈了,和前面的一样
STL的算法-sort
第一个参数指向的是第一个元素,第二个参数是最后一个,对与string进行排序的话就是按照字典序来排,也就是我们所说的ASCI码来排
这个函数还可以对任意区间进行排序
好了,以上就是今天的全部内容