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,通过引用传参,交换成员变量。