文章目录
一. swap
共有3个swap,算法库有一个,string中有两个。
算法库中的swap使用起来很简单,但是效率太低。
string中有两个,一个是在类里面实现的,一个是在类外面实现的。【都较简单】
1. 算法库中的swap
c(a);
(1) c是在作用域里面新创建的对象,c(a)是用参数a的初始化b【拷贝构造】。
(2) a=b;(a和b都是有值的。需先将a释放,然后再将b赋值给a)
(3) b=c;(先将b释放,再将c赋值给b)
(4) 最后,在出这个作用域的时候,将c释放掉。
整个过程中,需要3次构造,3次释放。
使用方法:
string s1("helloworld");
string s2("xxxxxxxxxx");
swap(s2, s1);
string中的swap
string中的swap,它没有三构三析。它只是将两个对象的指针,_capacity,_size交换了,以此达到交换的目的。
(指针(char*)和空间大小(size_t)等都是内置类型,交换内置类型,不需要自己写交换逻辑,可以直接调用算法库的swap。但是但是,注意:当在局部域的时候,会优先调用自己里面的swap,所以需要指明命名空间域std::)
//模拟实现string的swap
void string::swap(string& s)
{
std::<