先看下面两个例子:
#include <iostream> // std::cout
#include <utility> // std::swapint main() {int x = 10, y = 20; // x:10 y:20int* p1 = &x;int* p2 = &y;std::swap(*p1, *p2); // x:20 y:10 ,p1->x=20,p2->y=10return 0;
}
与
#include <iostream> // std::cout
#include <utility> // std::swapint main() {int x = 10, y = 20; // x:10 y:20int* p1 = &x;int* p2 = &y;std::swap(p1, p2); // x:10,y:20,p1->y=20,p2->x=10return 0;
}
上面两个例子,说明了当交换指针时,传不同的参数给swap,结果不同,虽然最后指针所指的值都改变了,但方法是不同的。这就像开锁,原先有两把万能钥匙分别锁两个柜子,钥匙分别存放在两个抽屉里,第一种方法就像是把两个柜子换了,所以抽屉里锁子打开柜子的东西正好换了。第二种办法就像是把两把锁换了,但锁能开的柜子不变,但是抽屉里打开柜子的东西也换了。