我們平時使用的交換兩個數字沒有用C第三/ C++
a=a+b;
b=a-b;
a=a-b;
邏輯來解決這個代碼,但是,如果我們用int
工作,然後說以後30000
的代碼失敗,如果我們採取long
,在說出1000000
左右後失敗。我的目標是,不要增加代碼的長度,請執行相同的操作。我已經試過用BIT wise XOR
,
a = a^b;
b = a^b;
a = a^b;
還是沒有幫助,有什麼想法?
我們平時使用的交換兩個數字沒有用C第三/ C++
a=a+b;
b=a-b;
a=a-b;
邏輯來解決這個代碼,但是,如果我們用int
工作,然後說以後30000
的代碼失敗,如果我們採取long
,在說出1000000
左右後失敗。我的目標是,不要增加代碼的長度,請執行相同的操作。我已經試過用BIT wise XOR
,
a = a^b;
b = a^b;
a = a^b;
還是沒有幫助,有什麼想法?
要交換的可變a
和可變b
:std::swap(a, b);
實施例:
int a = 10;
int b = 20;
std::cout << "Before swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
std::swap(a, b);
std::cout << "After swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
使用GCC 4.9.2輸出:
之前交換
值的一個:10
b值:20
交換後
價值一:20
值B的:10
做的這種方式使用右值內部,因此具有接近於零的開銷用於其他用途的情況下,並不會溢出任何原始類型不斷
你是什麼意思,「這種做法使用右值,所以它接近零開銷」。 –
移動一個int與複製它的成本完全相同。不,std :: swap特別不適用於r值(它在內部使用它們,但是對於int也沒有什麼不同)。 – MikeMB
@MikeMB關於僅在內部使用右值的好處,我認爲在上下文中會很清楚。編輯爲bo明確。並且,對於整數來說也是一樣的,但我試着回答儘可能廣泛適用的問題,所以我想指出'std :: swap'的一般好處。 –
歡迎來到SO :-)你能解釋一下「代碼失敗」是什麼意思嗎?究竟出了什麼問題? –
看起來像http://stackoverflow.com/q/1826159/2579220 – mvw
如果'a'和'b'太大,則加法可能超出整數範圍。 –