[轉錄]Re: [問題] swap

看板PCSH91_305作者 (我要當總圖的怪老頭)時間17年前 (2007/04/09 23:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 nfsong 信箱] 作者: avhacker (我想把整片天空打開) 看板: C_and_CPP 標題: Re: [問題] swap 時間: Mon Mar 19 23:49:59 2007 ※ 引述《aecho (星空下的鮪魚)》之銘言: : ※ 引述《stonehomelaa (cousin)》之銘言: : : 也可以連型別也一起展開 : : #define SWAP(T, x, y) { T tmp; tmp = x; x = y; y = tmp; } : : 使用的時候就 SWAP(int, x, y) : #define swap(x,y) {x ^= y ^= x ^= y;} 這在非數字型別就不管用了. 所以還是 template specialization 好用. template<typename T> inline void swap(const T& t1, const T& t2) { do_swap<T, boost::is_integral<T>::type>(t1, t2); } template<typename T, bool> inline void do_swap(const T& t1, const T& t2) { T tmp(t1); t1 = t2; t2 = tmp; } template<typename T> inline void do_swap<T, true>(const T& t1, const T& t2) { t1 ^= t2 ^= t1 ^= t2; } 都兼顧了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.19.235

03/20 00:17,
C 語言沒這東西...XD
03/20 00:17

03/20 00:18,
template 比巨集好太多了....
03/20 00:18

03/20 00:43,
雖然原 po 說 C,但他其實是用C++.不過這對初學者太恐怖了
03/20 00:43
※ 編輯: avhacker 來自: 140.123.19.235 (03/20 00:49)

03/20 09:15,
請問第2個的bool和第3個的true是做什麼的 可以不要嗎
03/20 09:15

03/20 09:40,
那是用來選擇這兩個template的
03/20 09:40

03/20 09:41,
加個true是第二個 否則是第一個
03/20 09:41
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.181.226
文章代碼(AID): #166bORET (PCSH91_305)