Re: [問題] std::sort()傳compare函式的問題

看板C_and_CPP (C/C++)作者 (眠月)時間16年前 (2009/03/14 01:12), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《elefant ()》之銘言: : 如果說今天是這樣呼叫 : inline bool cmp(int a, int b) {return a > b;} : std::vector<int> V ; : // push back ints to V : std::sort(V.begin(), V.end(), cmp) ; : 這樣子的效果感覺上還是等同於傳function pointer嗎?? (疑問一) 看 compiler,不過九成是這樣沒錯, 如果 compiler 非常強大,那搞不好有機會 inline, 就我所知 g++ 沒辦法,VC9 即使開跨模組最佳化也辦法。 Intel C++ compiler 我手邊沒有,有人有人願意幫測? (連 virtual function 都可以 inline 的恐怖 compiler) : 如果疑問一答案是True, 那是否以下的作法才是真正有快到?(疑問二) : struct Cmp : { : bool operator()(int a, int b){a > b ;} : } cmp ; : std::sort(V.begin(), V.end(), cmp) ; : 這樣子cmp.operator()應該就會被展開在std::sort了 : 但是好像還是會牽扯Cmp這個function object的copy? : 有辦法可以避免掉此copy的overhead嗎? : 煩請各位高手指點 ^_^ 對,不管 g++ 還是 VC 在這邊都會大幅加速。 至於 overhead,以這個 case 來說,沒有 overhead。 因為這邊的 copy ctor 會被 inline, 而 copy ctor 什麼事也沒作,inline 之後自然也一行碼都沒有。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.106.19 ※ 編輯: yoco315 來自: 118.160.106.19 (03/14 01:29)

03/14 09:20, , 1F
感謝感謝 ^_^
03/14 09:20, 1F

03/14 11:53, , 2F
推個認真... XDDD
03/14 11:53, 2F

03/15 01:34, , 3F
可以參看 effective STL item 46,有提到這件事
03/15 01:34, 3F
文章代碼(AID): #19kfGHPq (C_and_CPP)
文章代碼(AID): #19kfGHPq (C_and_CPP)