先看下面兩個例子:
#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,結果不同,雖然最后指針所指的值都改變了,但方法是不同的。這就像開鎖,原先有兩把萬能鑰匙分別鎖兩個柜子,鑰匙分別存放在兩個抽屜里,第一種方法就像是把兩個柜子換了,所以抽屜里鎖子打開柜子的東西正好換了。第二種辦法就像是把兩把鎖換了,但鎖能開的柜子不變,但是抽屜里打開柜子的東西也換了。