C_and_CPP 板


LINE

※ 引述《chun0826 (蛋頭￾ ︩》之銘言: : ※ 引述《khoguan (Khoguan Phuann)》之銘言: : : 是的。list 中的 sort() 有兩個,一個不需參數的就是 : : aecho哥講的那樣使用就對了,很簡單。另一個要參數的, : : 就比較複雜,我寫了一個完整的程式供參考: : : // user-defined function object for comparison : : #include <iostream> : : #include <list> : : #include <iterator> : : using namespace std; : : class MyObj { : : public: : : MyObj(int i=0) : data(i) {} : : bool comp(const MyObj& other) const { // 假設所用的比較函式名為 comp : : if (this->data < other.data) return true; : : else return false; : : } : : friend ostream& operator<< (ostream& os, const MyObj& my); : : private: : : int data; : : }; : : ostream& operator<< (ostream& os, const MyObj& my) : : { : : return os << my.data; : : } : : // 以下是重點 : 這段可以解釋一下嗎.. : 還有位什們要有這一段.. : 目的為何.. 就是為了要產生 function object 給 list 的 sort 用。 如果沒有 functio object 的概念,要說明這段程式的寫作技巧, 老實說不是簡單幾句能夠講完的。也許要面對面教幾個小時吧。 : 這一段應該不是我照抄就可以解決的吧.. 如果你上面的比較函式是這樣宣告: bool comp(const MyObj& other) const; 不管函式名稱(comp),只管傳回的 type 是 bool, 參數的 type 也是 const T& 那個 T 要是這個 class 的名字,而接著後面也要有 const. 也就是 const member function, 那麼下面這段就可以照抄。 當然最後面實際呼叫 sort 時,所用的參數要用對 class 及 function 名稱。 : : template <typename T> : : class compf { : : bool (T::*pcomp)(const T&) const; : : public: : : explicit compf(bool (T::*p)(const T&) const) : pcomp(p) {} : : bool operator()(const T& t1, const T& t2) { : : return (t1.*pcomp)(t2); : : } : : }; : : template <typename T> : : compf<T> mem_comp(bool (T::*p)(const T&) const) { : : return compf<T>(p); : : } : : int main() : : { : : list<MyObj> mylist; : : for (int i = 9; i >= 1; --i) : : mylist.push_back(MyObj(i)); // 放進 9 個元素做測試用 : : mylist.sort(mem_comp(&MyObj::comp)); // 注意寫法! : : // 正確印出排序後的結果 : : copy(mylist.begin(), mylist.end(), ostream_iterator<MyObj>(cout, "\n"); : : } : : 可參考 The C++ Programming Language, chap. 18 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 可以給一下作者嗎.. 這是 C++ 的創造者 Bjarne Stroustrup 寫的 C++ 聖經。第三版 葉秉哲有中譯,評價極好。或者參考侯捷譯的 C++ Primer 第三版, 可是這書英文版第四版已經出了。新版中譯可能要再等一陣子。 : : 或是專門講 STL 的書。 也可參考「C++ 標準程式庫」一書,侯捷中譯。 --
QR Code



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.166
1F:→ khoguan:馬上貼個簡易版上來,請稍候220.130.208.166 06/13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP