[討論] list 高效實作

看板C_and_CPP (C/C++)作者 (卡卡獸)時間11年前 (2014/09/06 14:49), 編輯推噓4(4023)
留言27則, 7人參與, 最新討論串1/1
雖然和 algorithm 比較相關 , 但比較相知道的是 std::list .. 目前我所知道的是 std::list 是用 double-list , 而一般人所知在 head 部份做頻繁的 插入 / 刪除 效率比 vector 來得快 , tail 部份做操作也不慢,不過不管怎麼想就是有很多優化空間, 拿常見的 new / delete node 來講 , 不管怎麼想就是累計到一定程度後, 再一次刪除 / 新增即可,省下頻繁的記憶體操作時間 (嗯 ... 這樣好像和 vector 的配置策略相似了 .. ) 我想一般學校只是為了 了解原理 ,所以沒再講後面這部份, 想知道 std::list 是不是有我所說上述的概念 ? 或是有 open source 有用到之類的? 還是我所提的跟垃圾沒兩樣,實務上沒人會這麼搞? 謝謝各位的討論指教。 ~ ~ -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 < Kuso 星爺語錄 > -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.165.160 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1409986154.A.4CB.html

09/06 14:51, , 1F
只是頭尾用deque就好了,通常有做這種處理
09/06 14:51, 1F

09/06 14:51, , 2F
list真正的優勢是中間插入刪除
09/06 14:51, 2F

09/06 14:52, , 3F
如果作這種處理會很容易浪費大量空間
09/06 14:52, 3F

09/06 14:57, , 4F
你應該找符合你狀況的"容器"(list array ...)
09/06 14:57, 4F

09/06 15:47, , 5F
new, delete 那個交給 allocator ?
09/06 15:47, 5F

09/06 17:18, , 6F
@azureblaze,想到後來其實就是效率和空間在折磨,打入死結
09/06 17:18, 6F

09/06 17:18, , 7F
@GlobalBased:是的,有時覺得挺難挑的,用 vector<list>,
09/06 17:18, 7F

09/06 17:19, , 8F
list<vector>, 都沒 vector 來得快 @@
09/06 17:19, 8F

09/06 17:20, , 9F
@suhorng : 這也是我目前想到最簡單的方式 @@
09/06 17:20, 9F

09/06 20:40, , 10F
效能這個東西,等你發生效能問題再來處理就好了
09/06 20:40, 10F

09/06 20:40, , 11F
除非你做的東西本來就是為了效能..應該是這樣說的吧
09/06 20:40, 11F

09/06 20:41, , 12F
不然0.01秒和0.02秒 效能差了一倍 但可能對你系統
09/06 20:41, 12F

09/06 20:41, , 13F
可能根本沒有影響
09/06 20:41, 13F

09/06 21:57, , 14F
這種東西跟你的data有密切關係 不能以一論之
09/06 21:57, 14F

09/06 23:47, , 15F
有種說法是插頭尾插中間有懷疑的時候用vector就對了
09/06 23:47, 15F

09/06 23:48, , 16F
vector在cache上的效能通常會壓勝其他缺點
09/06 23:48, 16F

09/06 23:48, , 17F
真的發現有問題要改也不會太麻煩
09/06 23:48, 17F

09/07 00:53, , 18F
@Goal~:我知道你說的,不過有時"部份功能"就是這麼要求Orz
09/07 00:53, 18F

09/07 00:53, , 19F
@azureblaze:這結論真重要了,謝謝 :D
09/07 00:53, 19F

09/07 14:33, , 20F
可能跟原文無關,我猜原po其實是project碰到scaling
09/07 14:33, 20F

09/07 14:33, , 21F
issue? 我會建議直接profile/unit test催下去了
09/07 14:33, 21F

09/07 14:34, , 22F
gap用猜的按我的經驗是10猜9錯 命中率超驚人的 :P
09/07 14:34, 22F

09/08 16:24, , 23F
大量的插入或刪除等操作就要考慮用hash去實作
09/08 16:24, 23F

09/08 16:25, , 24F
如果你的資料量到達上百萬的list的話就要考慮
09/08 16:25, 24F

09/08 20:13, , 25F
@Killercat : 我沒聽過 scaling issue, 跪求翻譯 @@
09/08 20:13, 25F

09/08 20:31, , 26F
噢就是因為大量資料造成的效能問題的意思
09/08 20:31, 26F

09/08 20:59, , 27F
@Killercat : 是你說的沒錯, 資料量真不小...
09/08 20:59, 27F
文章代碼(AID): #1K2gvgJB (C_and_CPP)
文章代碼(AID): #1K2gvgJB (C_and_CPP)