Re: [問題] swap兩個元素的方法
以前交換兩個東西的時候有時候會用到記憶體複製
比如說交換兩個 char 陣列。
但是學了 class 之後,覺得用記憶體複製來複製或交換 class 是錯誤的。
後來剛好看到一本書上寫說:
"寫程式的人不要寫記憶體複製去複製一個 class 的變數
除了有可能錯誤,而且他還說編譯器可以用更有效率的方式去達到。"
不知道以上有沒有誤解作者意思,但我很好奇什麼是更有效率的方式呢?
謝謝~~謝謝
P.S. 後來覺得實在太麻煩,有時候如果可以,
我都直接交換 pointer 本身了事,不知道這樣是不是也不好?
舉例
char *a = "12345";
char *b = "67890";
std::swap(a, b);
※ 引述《applecool (noOneKnows)》之銘言:
: 關於整數swap,根據置底的文章誡條,看來
: x^=y^=x^=y; 的寫法是不可以的。
: 那請問加上括號寫成 x ^= ( y ^= ( x ^= y ) );
: 依然有運算元一樣,是不是也是錯誤呢?
: 看來只要運算元不一樣就OK
: 拜讀了版上高手文章
: "4/11 LPH66 R: [問題] 請教如何只用x,y兩變數來交換彼此數值"
: 不知道加了括號會不會改變情況?(好像不會)
: 雖然實際上我都用 std::swap,
: 還是想請教各位一下,
: 感恩啊!
: ※ 引述《nana0130 (小那)》之銘言:
: : 遇到的問題: (題意請描述清楚)
: : swap 兩個數值
: : 可以這樣寫
: : void swap(int *a, int *b) //交換a跟b指向位置的值
: : {
: : int temp;
: : temp = *a;
: : *a = *b;
: : *b = temp;
: : }
: : 還有什麼別的方法嗎 ?
: : 為什麼不能傳值到function 裡面去作交換
: : void swap(int a, int b) //交換a跟b指向位置的值
: : {
: : int temp;
: : temp = a;
: : a = b;
: : b = temp;
: : }
: : 我試的結果是 swap裡面 是交換了
: : 但是回去 main 之後,卻仍沒交換~~
: : 這是為什麼?
: : 為什麼 一定要用傳位址~~
: : 希望得到的正確結果:
: : 程式跑出來的錯誤結果:
: : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: : 有問題的code: (請善用置底文標色功能)
: : 補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.137.131
→
01/06 02:28, , 1F
01/06 02:28, 1F
→
01/06 02:32, , 2F
01/06 02:32, 2F
→
01/06 02:33, , 3F
01/06 02:33, 3F
→
01/06 22:39, , 4F
01/06 22:39, 4F
討論串 (同標題文章)