交換2個變數與臨時變數

2021-03-31 08:56:59 字數 1108 閱讀 8913

交換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個變數與臨時變數

選擇自 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中,可以看出,非常的簡潔,那怕...

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 其實我們看加減法更...