底层是char
str.npos是string对象的一个成员,表示size_t(无符号整形)的最大值,通常作为返回值用来表示不匹配的情况
一.构造
string的拷贝构造构造可以这样传参
1.传string/char*(或两者加const)
2.传string/char*,第a个,到第b个(或两者加const)
3.传char*,前n个(或两者加const)
4.前n个,都是char
5.string的前后两个迭代器
二.赋值运算符重载
1.右写string/char*(或两者加const)
2.右写char
三,迭代器
(每个容器自己的迭代器都不同,所以要在iterator类型名之前指明作用域string::iterator)
域:
//迭代器 std::string::begin(此处特指string类的迭代器方法)
类型:
具体类型取决于编译器:
VS中
gcc中(注意,gcc中typeid().name()要加typeinfo的头文件)
使用:
它的具体类型不一定是指针,仅仅用法像指针。(加减跳过相应距离指向对应成员)
1.begin(),end(),rbegin(),rend()
域:
string类的公有成员函数 std::string::begin
作用:
返回对应迭代器iterator类型,(顺序)
注意:迭代器的使用应该【n.begin,n.end)按照一定顺序最后的迭代器指向一个无效数据(.end指向'\0',rend指向string的第一个成员之前。
2.解引用
可以遍历string每个字符
3.rbegin,rend,与end-1,begin-1同,但是对其+等于正常逻辑的-
域:std::string::rbegin
返回对应迭代器reverse_iterator类型,(逆序)
3.重载
根据参数string类型来决定
1.const类型返回const的一定顺序的迭代器类型
2.非const类型返回非const的一定顺序的迭代器类型
如:传入const string返回const_reverse_iterator
优化:
可以用auto接收获取迭代器的方法
即分类:
常量迭代器对常量string操作
普通迭代器对普通string操作
四.string类型的遍历
1.[ ]重载
作用:可以直接找到string的对应字符,且对查找的下标进行了size检查,会抛异常
缺点:只能对顺序存储的数据结构使用
2.迭代器
作用:在所有stl的数据结构中都可以用迭代器遍历,包括树
使用见三
3.范围for(遍历最方便)
作用:顺序逐个遍历string,底层是迭代器,所以都能用
五.对字符按字典序排序
sort 头文件<algorithm>
1.作用:通过迭代器对顺序存储的stl容器排序---->这些提供了随机访问迭代器
2.用法:sort(首迭代器,末尾迭代器)
3.1默认从小到大,
3.2要自己定义,要用下面的重载函数的,第三个参数传结构体
要自定义一个结构体,里面放参数为两个值,返回值为bool类型的函数,将这个结构体当作sort的第三个变量,用于提供比较方法。
六.string的插入方法
1.append![](https://img-blog.csdnimg.cn/direct/fb180d9b5b3b4d3bb1f1c5a37a3221b4.png)
1.支持string,char*(或者两者之前加const)
支持string从a到b
支持char*前n个
支持尾插n个相同字符
支持string的首尾迭代器
注意:一般尾插+=更好用,如str+="acd"或str+='a'
2.pushback()
对string尾插一个字符
3.popback()
删除string尾部的一个字符
4.在指定位置插入
insert
5.指定删除
erase
也可以删除迭代器指定的字符或前后迭代器中的字符。
6。指定替代
assign整个替换string内容。
注意:insert头插时间复杂度为o(N),可用尾插加reverse来替代(O(n))
补充:max_size为string能扩到的最大空间,一般不需考虑,其空间上限高,多达2G.
string中的'\0'不算在capacity,size内,因此capacity比实际空间少一个。
string内部有buffer少于buffer的存到buffer内,满了放到实际的string空间内,但这种扩容是不确定的,vs中扩容不规律,gcc中较为规律。
6.2 replace指定替换
注意:所要替换的部分少,替换成的内容多,会导致效率低。是删除后一个一个移,O(n)
7.改变空间大小
7.1.resize
将size改变,可以通过删除有效数据将size变小,也可以扩大size至实参、
7.2.reserve
保留空间大小,有的能扩容,有点不能,取决于编译器(vs不行)
注意:只会改变STRING的capacity,扩容完也不能直接访问扩容的空间,因为[ ]会进行size检查,发现size即有效数据不变在访问空间前,报错
7.3 shrink_to_fit
将字符串空间capacity缩小至size大小,不影响有效数据
8.操作
1.reverse
适用于stl中大部分容器,通过前后迭代器将之间包括迭代器指向位置顺序全反转
2.at
找到某个位置字符
注意:与[ ]区别,at更温柔,越界出错了会报异常,而不是直接终止程序
看,它可以显示在终端,而不是直接跳出红框框然后直接终止
3.c_str
将一个string变量的头字符的指针以const chat*的形式返回,方便调用C中需要char*的函数,如
FILE*fp=fopen(str.c_str(),"r")
4.copy
作用:将指定位置区间的string拷贝到char*中
5、find
作用:在现在的string的某个位置开始找字串或字符,返回相应下标位置
6.rfind
从后往前找 ·
7.substr
从现在string中指定区间截取出来,形成一个新string
8.clear
清空string
9.empty
判断字符串是不是空