[問題] if-else簡化寫法

看板C_and_CPP (C/C++)作者 (攸藍)時間12年前 (2014/02/15 23:56), 編輯推噓3(3021)
留言24則, 4人參與, 最新討論串1/1
開發平台(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

02/16 00:38, , 1F
你要的應該是 && 而不是 &
02/16 00:38, 1F
謝謝告知

02/16 00:42, , 2F
operator 獨立看起來會較簡潔 . container 在你的問題幫助
02/16 00:42, 2F
operator 我想寫在一起 沒想拆開...

02/16 00:44, , 3F
不會太大 ( 扣除掉謎樣的 valarray 具加速空間 ) , 其它的
02/16 00:44, 3F

02/16 00:45, , 4F
應是評斷你願不願意花開發時間換取執行效率,不然可跑就好.
02/16 00:45, 4F

02/16 00:49, , 5F
看到 keyword , eigen library 對 c++ 特性熟才容易上手.
02/16 00:49, 5F
謝謝大大告知 我會繼續補強我的C++的

02/16 02:04, , 6F
可以畫檢一下找出比較簡單的邏輯
02/16 02:04, 6F

02/16 02:08, , 7F
不然可以用變數把狀況先記起來 用switch?
02/16 02:08, 7F
switch 考慮過 可是真的不如if-else簡單

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

02/16 03:13, , 9F
擔心readibility 我覺得保持現狀即可
02/16 03:13, 9F
好,不過我還要擴充兩個operate...怕越來越亂

02/16 03:14, , 10F
倒是你的程式確定正確性ok嗎? 如果A_r==B_r && A_c==B_c
02/16 03:14, 10F
其實我還沒寫完,還少這個case跟else還要報錯XDD

02/16 03:15, , 11F
的情況好像沒寫到?
02/16 03:15, 11F

02/16 03:15, , 12F
然後第44行那邊應該是for ... i<A_c ?
02/16 03:15, 12F
謝謝更正,真的很細心幫我看

02/16 03:17, , 13F
還有建議 第16行最好寫B_r,B_c 第30行寫B_r,B_c 和原本
02/16 03:17, 13F

02/16 03:17, , 14F
的code是一樣的function 可是我覺得意義上比較好XD
02/16 03:17, 14F
好,謝謝建議

02/16 03:19, , 15F
另外就是 如果不符合所有以上case的話 的error output也
02/16 03:19, 15F

02/16 03:20, , 16F
要處理一下(3x5加上2x4之類的) 可能在99行加個code 印出
02/16 03:20, 16F

02/16 03:20, , 17F
錯誤訊息 exit(1)之類的@@
02/16 03:20, 17F

02/16 03:29, , 18F
另外14行的A_r<B_r, 21的A_r>B_r, 28的A_c<B_c, 35的A_c
02/16 03:29, 18F

02/16 03:30, , 19F
>B_c, 42和48的兩個!=, 這些我覺得都可以拿掉, 因為對於
02/16 03:30, 19F

02/16 03:31, , 20F
運算結果應該沒差@@ 然後加了這些多餘的判斷式卻有礙閱
02/16 03:31, 20F

02/16 03:32, , 21F
讀...如果只剩 A_r==1 && A_c==B_c 就可以解釋成 一個列
02/16 03:32, 21F

02/16 03:32, , 22F
向量和一個矩陣相加...這樣應該會比較單純好閱讀~
02/16 03:32, 22F
謝謝,已經修改 程式已經全數修正完畢,完整版本就不方便放上了, 有興趣可以在私信我,或是自行修改。 ※ 編輯: celestialgod 來自: 36.238.90.220 (02/16 05:00)

02/17 03:50, , 23F
嗯,我當時的意思是,operator=="times" 以下的敘述可獨立成
02/17 03:50, 23F

02/17 03:50, , 24F
functions,這樣變一個函式呼叫其它四個函式,不過弄完也罷.
02/17 03:50, 24F
文章代碼(AID): #1I_uul8Y (C_and_CPP)
文章代碼(AID): #1I_uul8Y (C_and_CPP)