C++的string类初识

底层是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

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

判断字符串是不是空

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值