c++ string之字符替换、string的swap交换

一.相关题型

例:将字符串中的空格全部替换成10%

最简单的方法是调用string类中的replace函数

但是replace这个函数的效率很低很低

我们可以使用如下做法——用空间换时间:

假如题目还要求在原字符串上修改,就可以再进行下面的操作,就是将tmp的值赋给s。但注意,他们是string类型,所以可以如下操作:

这里的assign函数是string提供的,表示给s分配一个字符串,用来替换s中原有的字符串,所以上面就是将tmp中的字符串分配给s。

还可以使用swap函数。

二.swap函数

swap函数是库中提供的一个全局模板函数

所以上面的代码可以改成:

这里有几次拷贝呢?一共三次深拷贝!!!因为通用swap函数会有一次拷贝构造,两次赋值重载。显然这个是非常糟糕的方式!!

那该怎么办??string自己重写了swap函数!!

三.string自己的swap函数

string类重写了swap函数,里面是直接将string对象的成员变量进行了交换,这就是简单的swap了,不会涉及到构造/赋值重载,因为都是内置类型。

但其实swap(s,tmp)调用的不是库里的那个模板函数/!!!!,因为string中也有一个两个参数的swap,通过引用传参,交换成员变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值