作者loveme00835 (高髮箍)
看板C_and_CPP
標題Re: [問題] 以下程式要如何作最佳化?
時間Sat May 18 03:39:51 2013
※ 引述《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
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (05/18 03:43)
推 VictorTom:推:) 05/18 14:15
推 frankhsu421:感謝,Lambda似乎就是我在尋找的答案 05/18 14:19
→ frankhsu421:不過看大家討論,應該還是會選擇多宣告變數搭配switch 05/18 14:20
→ frankhsu421:另外Lambda C++11似乎有支援了? 05/18 14:20
→ suhorng:([](int _1){ return _1==1 | _1==5; })(a*b)你說這個? 05/18 15:41
→ loveme00835:我的話不會另外多宣告變數, 除非這個變數真的有什麼用 05/18 17:01
→ loveme00835:途必須透過"名稱"來強調, 每次我想名字就會想很久... 05/18 17:01
→ loveme00835:lambda expr 會讓 code 變冗長, 能不用就不用囉 05/18 17:03
推 TeaEEE:Lambda雖然a*b只做一次,但是效能真的有比較好嗎? 05/18 17:50
→ hilorrk:基本上這三種效能都一樣吧...? 05/18 17:52
→ suhorng:現在問題不是在a,b可能是任意函式呼叫嗎? 05/18 20:09
推 dendrobium:正常人看不懂XDDDD 05/18 21:02
推 descent:我是正常人 05/18 22:35
→ amozartea:我也是正常人.... 05/18 23:58
→ amozartea:那還是宣告c比較好吧... 05/18 23:59
→ MOONRAKER:整人專家可以… 05/19 06:51