Re: [問題] swap兩個元素的方法

看板C_and_CPP作者 (noOneKnows)時間13年前 (2012/01/05 16:15), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串4/4 (看更多)
以前交換兩個東西的時候有時候會用到記憶體複製 比如說交換兩個 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
更有效率應該是說有些class可以做copy-on-write吧?
01/06 02:28, 1F

01/06 02:32, , 2F
還有char* s = "string literal"; 這種寫法已經是deprecated
01/06 02:32, 2F

01/06 02:33, , 3F
請改用const char* 至於要不要直接交換pointer應該看你要幹嘛
01/06 02:33, 3F

01/06 22:39, , 4F
thanks
01/06 22:39, 4F
文章代碼(AID): #1F1SoZPG (C_and_CPP)
文章代碼(AID): #1F1SoZPG (C_and_CPP)