選擇自
ken98091 的 blog
交換2個變數與臨時變數
先來看看最常見的交換方法
template
void swap1( t & a,t & b)
template
void swap2( t & a,t & b)
template
void swap3( t & a,t & b)
在swap1中,可以看出,**非常的簡潔,那怕是初學者,都能一眼看出來它的作用
但是,由於它用到了乙個臨時變數,這意味著要多消耗一些記憶體,,儘管只是棧空間
swap2中,巧妙的運用了異或運算來達到交換的目的
**雖然也只有三行,但不是一眼能看了它的作用,這從易讀性來講,
比swap1要差很多,但是它省下了乙個臨時變數.雖然只是乙個臨時變數--占用的記憶體也可能極少
但作為乙個炎黃子孫,乙個中華兒女,省吃儉用本來就是我們的美德!!!
swap3與swap2類似,只是由異或運算變成加減法.省吃儉用是我們的美德,那麼在此基礎上
舉一反三更是體現了中華民族的精神所在!!!
可是.....
請看看我們的函式宣告,它的前面有乙個template,沒錯,這是函式模版,這是c++
int i,j;
swapx(i,j);
不管是哪個,都可以通過^_^
ps:swap3中不需要考慮溢位問題,為什麼?自己想
再來看看
float f1,f2;
swapx(f1,f2);
怎麼樣,編譯時候遇到麻煩了吧?
再來乙個
struct r
rect r1,r2;
swapx(r1,r2);
這次更麻煩了,只有swap1能通過
來到這裡,得出乙個結論:
從"函式模版"的觀點上來講,只有swap1才是合格的,因為swap2與swap3都不能完全通過所有的型別
換句話來講,臨時變數變成了必須的!!
果然???
不然!!!
以下就是完美的解決**,也不想多說了,,,
template
void swapex( t & a,t & b)
}這樣一來,不管你是傳遞什麼型別或類,都能正確的交換,而且速度是最快的!!!
交換2個變數與臨時變數
交換2個變數與臨時變數 先來看看最常見的交換方法 template void swap1 t a,t b template void swap2 t a,t b template void swap3 t a,t b 在swap1中,可以看出,非常的簡潔,那怕是初學者,都能一眼看出來它的作用 但是,...
php 交換 臨時變數 PHP交換兩個變數值
php實現兩個變數值交換,有兩種方法。第一種方法使用第三個臨時變數。第二種方法就是不使用第三個變數的情況下交換兩個變數值。下面我們就通過具體的 示例,給大家介紹php交換兩個變數值的方法。首先大家要知道交換兩個變數就是指相互交換變數的值。通常,這是通過記憶體中的資料完成的。方法一 交換兩個變數的最簡...
不用臨時變數,交換兩個變數的值
在學習c語言的時候,涉及到兩個變數值的交換,其中用到臨時變數。類似於 temp a a b b temp 這樣的語句,如果在沒有臨時變數的情況下,該如何做呢?網路上的人們給出了兩種方法 一 異或法 a a b b b a a a b 二 加減法 a a b b a b a a b 其實我們看加減法更...