Re: [問題] break的問題

作者: yoco315 (眠月)   2014-06-28 23:01:34
不是所有的狀況都是這樣
但很多時候用 range 會有好處
可讀性比較高、程式碼比較短、複用性也比較好
可以看敝人這篇關於 boost range adaptor 的範例
https://www.ptt.cc/bbs/C_and_CPP/M.1302453243.A.432.html
試想如果不用 range 的話寫起來會麻煩很多
而且讀程式碼的人需要額外付出心思才能看懂原作者的意圖
template 速度慢這件事情,不太可能
我唯一能想到的就是你忘記開最佳化
你要不要再認真作一次 benchmark?
至於 boost 很肥這個問題
你應該是指之前你想要用 boost::graph 但切不出來的事情?
其實你一開始想要把 boost 的 source 放進 project 的 repo 就是一個錯誤的選擇
除非是很特別的狀況,不然 boost 的 source 應該是被視作「開發環境」的一部分
一般沒有 project 會想要把 boost 放進自己的 repo 裡面
你想想看就知道,我電腦裡面這麼多 project,明明大家用的都同一個 boost
如果每個 project 都自己一份 boost,那還得了?
大家都是直接安裝一份 boost 在自己的工作環境上
要用到的 boost 的人就隨著設定的 PATH 去 include
就像正常狀況沒有人會把 STL 放進自己的 repo 一樣
而 boost 本身交相授粉不易切割這點,通常是被視作 boost 品質優良的象徵
因為程式碼寫出來就是要讓人用的,就是因為寫的好才會多被使用
但回到原點,以樓主這個 case 來說
改成用 range 以後,程式碼從 9 行膨脹到 20 行,而且也沒有比較好讀 XD
板主大大的寫法反而變成有點 over design 了是真的
但如果平常習慣這種寫法
才有可能會邁向本文最上面講的
平常就使用 range 來加速開發跟提高可讀性的階段
就當作是一種練習也好
事實上這是一個趨勢了
很多語言都已經開始往 range 的方向移動
理論上也沒錯,如果我要處理的對象是元素,那我直接 iterate 元素就好
幹麻去 iterate 一個 iterator 來存取元素?
多一步就是多一個錯誤的機會…
※ 引述《iamstudent (stu)》之銘言:
: 關於版主提到的
: for loop應該改用樣板演算法去做
: 我有不少想法希望討論
: 關於template處理迴圈
: 有時候感覺可讀性其實沒有提高多少
: 傳統的for loop一樣非常簡單易懂
: 反而template並不是所有人都相當熟悉
: 如果迴圈內的工作比較複雜時
: 那麼把內部的工作抽出成為函數
: 用迴圈呼叫該工作函數即可
: 如果迴圈內處理的工作並不複雜
: 那麼template感覺上反而要寫更多東西
: 會有點像是強迫寫一個小函數
: 如果多起來就相當令人討厭
: 尤其是當該工作內容量根本就沒有寫成函數的價值時
: 會覺得這樣作似乎非常多餘
: 除了工作速度之外
: 執行速度是否有所提昇也相當令人質疑
: 以往的測試結果是template版本通常都比較慢
: 最後是boost
: 說實話,有人非常討厭它
: 以前接計畫時
: 就有主管表示不要用boost
: 我自己使用之後也有些經驗
: 對於規模不大的程式
: boost感覺上非常肥
: 而且一直無法只把想要的功能抽離出來
: 裡面的檔案互相糾纏引用到非常複雜
: 成為一塊巨大而難以分割的整體
: 最討厭的一點是
: 程式一旦用了boost
: 很可能就改回不去了
作者: diabloevagto (wi)   2014-06-28 23:19:00
這時候不得不說 ruby 真的包裝得很棒!
作者: uranusjr (←這人是超級笨蛋)   2014-06-28 23:51:00
Deploy 的時候還是很肥啊, 除非你要靜態編譯
作者: Killercat (殺人貓™)   2014-06-29 00:02:00
說template速度慢也許是誤把compile慢跟runtime慢搞混了
作者: iamstudent (stu)   2014-06-29 13:24:00
等等!這邊我要回一下,我指的是執行速度我不會到分不清編譯速度與執行速度而且我也很清楚要開最佳化,用debug模式測試根本無意義以前我在VS2005上測試過三種掃過動態配置空間的方法結果最快的是指標遞增,loop i與iterator寫法都比較慢另外還有一個也是很明確肯定不會比較快的case使用template作長向量加法,然後不產生暫時物件在C++ Template全覽這本書裡面可以找到它的程式碼結果也是template用了反而更慢,作者也有提到這點不是所有東西都搬到編譯期就有辦法被最佳化目前的編譯器已經很強了,但對於template似乎仍有不足
作者: loveme00835 (髮箍)   2014-06-29 17:03:00
唉唷,template 何辜。其實是我有強迫症啦!(超過兩層的迴圈我看了會頭暈) xD 看不懂 STL Algorithms 可能來自石器時代?我能接受的最低限度是 range-based for,有時為了省初始化的行數才會勉強用 for,不然都是 while。看個人取捨啦,效能真的有瓶頸時還是得往回改。啊啊 手機用到連讚拍謝,不是耍特權
作者: yoco315 (眠月)   2014-06-30 08:50:00
vs2005...............
作者: KanoLoa (卡)   2014-06-30 11:20:00
我很不習慣用while 看完我覺得應該要改掉...
作者: Killercat (殺人貓™)   2014-06-30 12:24:00
for(;;) and while(1), dochi!2005已經是十年前的古董了 :D
作者: GoalBased (Artificail Intelligence)   2014-07-01 13:21:00
while(true) 因為藍藍的比較好看
作者: elfkiller (沒有暱稱)   2014-07-02 00:05:00
PUSH
作者: donkeychen (Bad_To_The_Bone)   2014-07-03 09:40:00
還在用古董2005 +1.... =__=;岔話題 有強迫症的人寫程式很辛苦 要把別人的寫法全部先在style上改成自己的風格 然後是變數命名 ....所有的堅持都是編譯器忽略的東西
作者: EdisonX (卡卡獸)   2014-07-03 21:12:00
@donkeychen : 不過 team work 的專案似乎較不允許這麼做

Links booklink

Contact Us: admin [ a t ] ucptt.com