簡體   English   中英

交換實施:效率和適用范圍?

[英]swap implementations: efficiency & range of applicability?

我正在嘗試介紹所有swap功能的實現。

swap功能的以下實現中,不需要臨時變量來交換兩個參數的值:

void swapNoTemp1(int &a, int &b){
    a = a + b;
    b = a - b;
    a = a - b; 
}

要么

template <class T>
void swapNoTemp2(T& i, T& j){
    i -= j;
    j += i;  
    i = (j - i);  
}

要么

void swapNoTemp3(int &a, int &b){
    a ^= b;
    b ^= a;
    a ^= b;
}

因此,就使用的內存而言,它比:

void swap(int &a, int &b){
    int temp = a;
    a = b;
    b = temp; 
}

另一方面,可以使用以下方法實現swap

void swapPointers(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
}

我正在嘗試比較所有現有的實現,並了解它們的適用范圍。

第一個功能的行為是不確定的。 該算術可能會導致溢出,並且在某些計算機上,溢出會導致異常。

標准規定:

如果在表達式的求值過程中,未在數學上定義結果或該類型的結果不在可表示值的范圍內,則行為不確定。 [ 注意 :大多數現有的C ++實現都忽略整數溢出。 ...]

盡管在實踐中您很有可能可以使用該功能,但最好還是不要使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM