從剛開始接觸 cpp 你們都會學習的一個東西就是如何交換兩個變量的值,通常要新設置一個變量來儲存中間值,而後進行賦值運算。下面要介紹的方法能夠省去新建一個變量的空間,使用的位運算還能夠提升效率。ios
#include<iostream> using namespace std; void swap(int &a,int &b){ a ^= b; b ^= a; a ^= b; } int main(){ int m = 1; int n = 2; swap(m, n); cout << m << " " << n << endl; }
這裏的'^'就是異或運算符⊕。
首先讓a = a ⊕ b。
b = b ⊕ a,那麼 b = b ⊕ a = b ⊕ a ⊕ b,因此b = a。
最後,a = a ⊕ b,那麼 a = a ⊕ b = a ⊕ b ⊕ a = b。
至此,完成了 a 和 b 的交換。
可是,存在的一個問題就是,不能讓本身和本身進行交換,即:
swap(a,a);
由於:
a = a^a = 0;
a = a^a = 0;
a = a^a = 0;
這樣會使得這個數變成0。
所以遇到會讓單個元素本身與本身進行交換的狀況下,例如快排算法的時候,仍是老老實實用傳統方法比較合適。算法