[爆卦]if else寫法是什麼?優點缺點精華區懶人包

為什麼這篇if else寫法鄉民發文收入到精華區:因為在if else寫法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者celestialgod (攸藍)看板C_and_CPP標題[問題] if-else簡化寫法時間...



開發平台(Platform): (Ex: VC++, GCC, Linux, ...)

C++, GCC, Windows 7


額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

Eigen

問題(Question):
希望可以把code簡化

程式太過冗長...

希望有更簡明扼要的寫法

程式碼(Code):(請善用置底文網頁, 記得排版)

http://codepad.org/PaWuGuTF

新修改的:http://codepad.org/s0ccUhkZ

補充說明(Supplement):

function 功能敘述:

拿來做兩個矩陣(or 可兩個都為向量,或是一個為向量)的運算 (同matlab的bsxfun)

要先判斷兩個矩陣的dim為何,進行相對應的運算

假設operator 都用"plus"來舉例

例子一:

matrix A: 3 x 5

matrix B: 3 x 1

這樣就是有一個dimension相等

把B的元素加到A的每一行 => 得到矩陣C ( 3 x 5 )

例子二:

matrix A: 3 x 1

matrix B: 1 x 5

類似把A橫向複製五次 加上 B縱向複製三次

這樣會得到矩陣C (3 x 5)


如果operator 用 "times" 相加就改成相乘


現在因為有兩層,code會非常長

不知道有沒有方法縮成一層 (除了把if條件合併外的方法)

用比較簡單的方法呈現整個程式

謝謝大大協助!


另外,想問我現在C++都用Eigen library

而我只看過C++ primer中 資料型態的部分

對於template, STL, container完全不熟

會影響我寫程式的效率嗎?

主要使用是做科學運算為主

PS: 其他程式語言 只學過matlab, R

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.238.90.220
asilzheng:你要的應該是 && 而不是 & 02/16 00:38

謝謝告知

EdisonX:operator 獨立看起來會較簡潔 . container 在你的問題幫助 02/16 00:42

operator 我想寫在一起 沒想拆開...

EdisonX:不會太大 ( 扣除掉謎樣的 valarray 具加速空間 ) , 其它的 02/16 00:44
EdisonX:應是評斷你願不願意花開發時間換取執行效率,不然可跑就好. 02/16 00:45
EdisonX:看到 keyword , eigen library 對 c++ 特性熟才容易上手. 02/16 00:49

謝謝大大告知 我會繼續補強我的C++的

steve1012:可以畫檢一下找出比較簡單的邏輯 02/16 02:04
steve1012:不然可以用變數把狀況先記起來 用switch? 02/16 02:08

switch 考慮過 可是真的不如if-else簡單

jenny2921:我覺得程式碼雖然長 但是是很單純的if-clause 所以不用 02/16 03:13



jenny2921:擔心readibility 我覺得保持現狀即可 02/16 03:13

好,不過我還要擴充兩個operate...怕越來越亂

jenny2921:倒是你的程式確定正確性ok嗎? 如果A_r==B_r && A_c==B_c 02/16 03:14

其實我還沒寫完,還少這個case跟else還要報錯XDD

jenny2921:的情況好像沒寫到? 02/16 03:15
jenny2921:然後第44行那邊應該是for ... i<A_c ? 02/16 03:15

謝謝更正,真的很細心幫我看

jenny2921:還有建議 第16行最好寫B_r,B_c 第30行寫B_r,B_c 和原本 02/16 03:17
jenny2921:的code是一樣的function 可是我覺得意義上比較好XD 02/16 03:17

好,謝謝建議

jenny2921:另外就是 如果不符合所有以上case的話 的error output也 02/16 03:19
jenny2921:要處理一下(3x5加上2x4之類的) 可能在99行加個code 印出 02/16 03:20
jenny2921:錯誤訊息 exit(1)之類的@@ 02/16 03:20

已補上:http://codepad.org/s0ccUhkZ

jenny2921:另外14行的A_r<B_r, 21的A_r>B_r, 28的A_c<B_c, 35的A_c 02/16 03:29
jenny2921:>B_c, 42和48的兩個!=, 這些我覺得都可以拿掉, 因為對於 02/16 03:30
jenny2921:運算結果應該沒差@@ 然後加了這些多餘的判斷式卻有礙閱 02/16 03:31
jenny2921:讀...如果只剩 A_r==1 && A_c==B_c 就可以解釋成 一個列 02/16 03:32
jenny2921:向量和一個矩陣相加...這樣應該會比較單純好閱讀~ 02/16 03:32

謝謝,已經修改

程式已經全數修正完畢,完整版本就不方便放上了,

有興趣可以在私信我,或是自行修改。
※ 編輯: celestialgod 來自: 36.238.90.220 (02/16 05:00)
EdisonX:嗯,我當時的意思是,operator=="times" 以下的敘述可獨立成 02/17 03:50
EdisonX:functions,這樣變一個函式呼叫其它四個函式,不過弄完也罷. 02/17 03:50

你可能也想看看

搜尋相關網站