Re: [問題] 以下程式要如何作最佳化?

看板C_and_CPP作者 (高髮箍)時間11年前 (2013/05/18 03:39), 編輯推噓5(5011)
留言16則, 10人參與, 最新討論串2/4 (看更多)
※ 引述《frankhsu421 (問號)》之銘言: 方法1: switch switch( a*b ) { case 1: case 5: // your codes here default: } 優點: 加新的數值比較快, 寫起來清楚 缺點: case label 只能放常數, 要寫 default 區分其他情形 方法2: mask 法 if( ((a*b | 4) ^ ~5) == -1 ) // your codes here 優點: 無 缺點: 受限於二補數系統, 加新數值要再推導新算法 方法3: Boost.Lambda if( (_1 == 1 || _1 == 5)(a*b) ) // your codes here 優點: 可以將邏輯重複使用 auto one_or_five = _1 == 1 || _1 == 5; if( one_or_five(a*b) ) // ... auto one_or_five_or_nine = one_or_five || _1 == 9; if( one_or_five_or_nine(a*c) ) // ... 缺點: 編譯時間較長, 正常人看不懂 -- ╔═══╗╔═══╗ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗ 金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.221.215 ※ 編輯: loveme00835 來自: 140.121.221.215 (05/18 03:43)

05/18 14:15, , 1F
推:)
05/18 14:15, 1F

05/18 14:19, , 2F
感謝,Lambda似乎就是我在尋找的答案
05/18 14:19, 2F

05/18 14:20, , 3F
不過看大家討論,應該還是會選擇多宣告變數搭配switch
05/18 14:20, 3F

05/18 14:20, , 4F
另外Lambda C++11似乎有支援了?
05/18 14:20, 4F

05/18 15:41, , 5F
([](int _1){ return _1==1 | _1==5; })(a*b)你說這個?
05/18 15:41, 5F

05/18 17:01, , 6F
我的話不會另外多宣告變數, 除非這個變數真的有什麼用
05/18 17:01, 6F

05/18 17:01, , 7F
途必須透過"名稱"來強調, 每次我想名字就會想很久...
05/18 17:01, 7F

05/18 17:03, , 8F
lambda expr 會讓 code 變冗長, 能不用就不用囉
05/18 17:03, 8F

05/18 17:50, , 9F
Lambda雖然a*b只做一次,但是效能真的有比較好嗎?
05/18 17:50, 9F

05/18 17:52, , 10F
基本上這三種效能都一樣吧...?
05/18 17:52, 10F

05/18 20:09, , 11F
現在問題不是在a,b可能是任意函式呼叫嗎?
05/18 20:09, 11F

05/18 21:02, , 12F
正常人看不懂XDDDD
05/18 21:02, 12F

05/18 22:35, , 13F
我是正常人
05/18 22:35, 13F

05/18 23:58, , 14F
我也是正常人....
05/18 23:58, 14F

05/18 23:59, , 15F
那還是宣告c比較好吧...
05/18 23:59, 15F

05/19 06:51, , 16F
整人專家可以…
05/19 06:51, 16F
文章代碼(AID): #1HbeUCav (C_and_CPP)
文章代碼(AID): #1HbeUCav (C_and_CPP)