swap函数大家都很熟悉了,用于将两个对象进行交换,但是在std中swap需要进行一个拷贝构造,两次赋值操作。这对于小对象是可以接受的,但对于较大的对象来书,这个时间可是有点长了,所以可能要在特定的类中自定义swap成员函数。
1、对于int型的swap函数,可以使用异或操作符来进行交换,具体看如下代码
void my_int_swap(int &int_1,int &int_2) {
int_1 ^= int_2;
int_2 ^= int_1;
int_1 ^= int_2;
}
2、对于两个对象之间的交换,可以通过交换指针来实现
struct MyStruct {
int age_;
char name_[50];
MyStruct(int age,const char *name) :
age_(age){
strncpy(name_, name, strlen(name));
name_[strlen(name)] = '\0';
}
};
template<typename T>
void my_swap(T &t1, T &t2) {
size_t i = 0;
char *p1 = reinterpret_cast<char *>(&t1);
char *p2 = reinterpret_cast<char *>(&t2);
for (i = 0; i < sizeof(T); ++i) {
p1[i] ^= p2[i];
p2[i] ^= p1[i];
p1[i] ^= p2[i];
}
}