[爆卦]accumulate縮寫是什麼?優點缺點精華區懶人包

為什麼這篇accumulate縮寫鄉民發文收入到精華區:因為在accumulate縮寫這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者SJame (呆伯特)看板C_and_CPP標題[問題] 請教for_each和accumula...


在許多網站和書籍中都提到
如果我們要對一個容器裡的所有資料作某些操作
應該使用for_each
而不是用最基本的for(int n = 0; n < nSize; ++n) {...}
更進一步地,如果是數值方面的操作,可以考慮使用accumulation
不過所有這些書籍都只提到"應該這樣做",但沒有說明"為什麼應該"
for_each比起for並沒有比較靈活,可讀性亦不佳(funtor不是人人都懂的)
至於效率,我在STL源碼剖析裡看到的for_each也沒用到甚麼特別高效率的手法
實際上寫程式來測時間,也沒有比較快,很多時候for還比較快
accumulate與for的比較亦然
請問for_each和accumulate到底有甚麼好處?為什麼大家都推薦要用?
謝謝

--
「你要不要加入我們的TTP計畫?」
「什麼是TTP計畫?」
「喔,就是The TTP Project的縮寫」
<<呆伯特法則>>

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.228.146.2
x000032001:我不覺得for_each可讀性有差到哪耶= =a 01/10 18:47
SJame:樓上應該很熟悉funtor了,對初學者而言for終究比較親切囉 01/10 18:50
WaiTingKuo:利用interface去隔離 algorithm 和container 01/10 19:21
WaiTingKuo:也可藉此達到隱藏資訊,建議你看一下 iterator pattern 01/10 19:23
legendmtg:感覺for_each好讀很多.... 01/10 20:30
SJame:for_each好讀很多?說笑吧,如果只是說for_each僅需一行的話 01/10 20:33
SJame:把for裡面的行為拆出去成一個inline function也一樣簡潔 01/10 20:35
x000032001:不是討論for跟for_each嗎 自己再寫func不就本末倒置 01/10 20:42
SJame:我說的是在for裡面呼叫一個inline function,沒有本末倒置 01/10 20:48
legendmtg:光是看到for還要去思考它的range就沒有for_each好懂了.. 01/10 20:48
SJame:for_each也是把迴圈內行為拆出去,只不過不是函式而是仿函式 01/10 20:49
legendmtg:"對某個容器裡所有元素做以下操作"for_each不是很合意嗎 01/10 20:50
legendmtg:不想用functor寫在別的地方你可以用lamda啊XD 01/10 20:50
SJame:這個就見仁見智了,我是覺得range對可讀性沒有多少影響 01/10 20:52
aecho:因為我很懶,所以我喜歡for_each這一類的東西~~ 01/10 21:39
aecho:這樣我就不用記怎麼存取container的方法 01/10 21:40
aecho:介面越是一致,需要記的東西就可以越少~ 01/10 21:42
aecho:而且介面越是一致,也代表哪天換了別的container 01/10 21:47
aecho:相關的實作還是可以跑,不會因此連動的要改一大堆地方。 01/10 21:48
loveme00835:好讀怎麼可能是說笑? 原始的 for 可以寫出同時對多個 01/11 00:50
loveme00835:容器操作的東西, 甚至也可以寫出跟步進不相關的內容, 01/11 00:51
loveme00835:從他限制了只能對迭代器做操作, 以及強制代入functor 01/11 00:54
loveme00835:可寫性降低換來的是比較可以想像的行為, 不是你寫 for 01/11 00:55
loveme00835:就能告訴讀者的 01/11 00:56
loveme00835:另外像連續賦值用 fill, 複製用 copy, functor 我覺得 01/11 01:11
loveme00835:以算是基本知識了, 連 STL 都看不懂只能說程度太差, 01/11 01:12
loveme00835:怨不了別人 01/11 01:12
SJame:受教了,不過小小發個牢騷,所謂程度太差怨不得別人云云 01/11 12:49
SJame:其實程度差是不會怨的,程度好的人才會怨,因為你寫的code 01/11 12:50
SJame:別人看不懂,那往後的修改都只能由你維護,永遠沒有轉移的一 01/11 12:52
SJame:天,這是台灣軟體業注重速成的悲哀 01/11 12:53
loveme00835:寫C++還要怕別人不懂for_each, 那 printf 我也好怕別 01/11 21:52
loveme00835:人維護不了喔... 01/11 21:53
loveme00835:接下來是主觀意見: for表達的語意是「重覆執行某些指 01/11 21:59
loveme00835:令」for_each是「對集合每個元素都做某些事」, 從這幾 01/11 22:00
loveme00835:個字就可以猜後面在做什麼, 根本不用看到本體, 還卑不 01/11 22:02
loveme00835:悲哀, 只停留在功能面還有資格說這種話? 01/11 22:02
legnaleurc:在 C++0x lambda expression 出來之後才真正變方便一點 01/12 01:34
loveme00835:for_each有其適用範圍, 硬要把它用在不合適的地方然後 01/12 21:15
loveme00835:說 functor 不方便可讀性差等理由, 已經不算是比較了 01/12 21:17

你可能也想看看

搜尋相關網站