Re: [問題] std::sort()傳compare函式的問題
※ 引述《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
03/14 11:53, 2F
推
03/15 01:34, , 3F
03/15 01:34, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章