其中的函式原型是:(1) void swap(int &a,int &b);傳引用
(2)void swap(int *a,int *b);傳位址
下面就第二個函式原型分析,**如下:
c code :
#include #include /**
使用中間變數tmp
*/void swap(int *a,int *b)
/** 使用加減法計算
*/void swap1(int *a,int *b)
/** 使用乘除法計算
*/void swap2(int *a,int *b)
/** 使用異或運算
*/void swap3(int *a,int *b)
int main(void)
/**執行結果:
start a:2 , b:3
swap a:3 , b:2
swap1 a:3 , b:2
swap2 a:3 , b:2
swap3 a:3 , b:2
*/
這裡總結了4個swap()函式的實現方法,前三個我就不詳細說了,分別用了:中間變數法,加減法,乘除法。相信我不說大家也能看得懂。我主要說一下第四種方法——異或法。這裡的異或法是利用了高等數學中的知識:
對任意數 a ,b ,c
(1)a ^ 0 = a
(2)a ^ a = 0
(3)(a ^b)^c=a^(b^c)
(4)a^b = b^a
這三條常識:
我們看到函式swap3()中,我們姑且將這兩個引數成為a,b
第一句 a = a^b; 咱們讓 c =a^b;
第二句 b = a^b;其時就是 b = c^b =a^(b^b)=a^0=a;
第三句 a = a^b;其時就是 a = c^b =a^b^a=b^(a^a)=b^0=b;
這樣就給交換過來了。。。。。
(1)空間效能
(2)時間效能
這其實沒啥說的
空間效能上swap()浪費乙個int 空間,其他沒有空間開銷。
時間效能上,雖然說都是執行3條語句,但是與語句不一樣,效率上 :位運算》加減》乘除 (大致上是這樣,具體情況還得具體分析)
所以swap3()技高一籌。。。。。。
是不是這幾個函式一定正確???呵呵。這可不一定,引數是int型別
swap1() swap2() 你想想看。。可能造成溢位的。。
事實的確是這樣 當a =2100000001 b=2100000002
你試一下。。呵呵。。swap() 和swap3()依然堅挺。。而swap1() ,swap2() 。。。完了。。
swap()當之無愧是最好的。。可讀性是最好的。。
綜上所述:建議大家使用swap3() ,swap()。。。**:
那些年我們用過的SSD
具體資訊如下 從比較中刪除 essentials 狀態launched 順序讀取 500 mb s 順序寫入 315 mb s 隨機讀取 100 跨度 75000 iops 隨機寫入 100 跨度 9000 iops 延遲 讀取 50 s 延遲 寫入 65 s 電源 活動 3.5w 電源 閒置 0....
用過php,那些年我們一起用過的 PHP 函式
用這個帖子記錄一下 php 中比較常用的函式以及使用過程中需要注意的點,此貼持續更新 1.strpos 函式 首先,我們知道 strpos 函式是用於查詢乙個字串在另乙個字串第一次出現的位置,示例如下 3 echo strpos i love php,i love php too php 輸出結果 ...
那些年用過的RSS閱讀器
最近幾天在折騰rss閱讀器,作業系統是黑蘋果os x 10.9.5,換了各種各樣的閱讀器,總沒有一款適合我,抓狂中。下面是對這兩天換的閱讀器的對比分析 1.feedly 缺點 不穩定 gmail經常無法連線,而且免費版無法匯出opml,勉為其難的在使用中 優點 使用者體驗完美,操作流暢 2.shro...