[讨论] list 高效实作

楼主: EdisonX (卡卡兽)   2014-09-06 14:49:07
虽然和 algorithm 比较相关 , 但比较相知道的是 std::list ..
目前我所知道的是 std::list 是用 double-list ,
而一般人所知在 head 部份做频繁的 插入 / 删除 效率比 vector 来得快 ,
tail 部份做操作也不慢,不过不管怎么想就是有很多优化空间,
拿常见的 new / delete node 来讲 , 不管怎么想就是累计到一定程度后,
再一次删除 / 新增即可,省下频繁的内存操作时间
(嗯 ... 这样好像和 vector 的配置策略相似了 .. )
我想一般学校只是为了 了解原理 ,所以没再讲后面这部份,
想知道 std::list 是不是有我所说上述的概念 ?
或是有 open source 有用到之类的?
还是我所提的跟垃圾没两样,实务上没人会这么搞?
谢谢各位的讨论指教。
~
~
作者: azureblaze (AzureBlaze)   2014-09-06 14:51:00
只是头尾用deque就好了,通常有做这种处理list真正的优势是中间插入删除如果作这种处理会很容易浪费大量空间
作者: GoalBased (Artificail Intelligence)   2014-09-06 14:57:00
你应该找符合你状况的"容器"(list array ...)
作者: suhorng ( )   2014-09-06 15:47:00
new, delete 那个交给 allocator ?
楼主: EdisonX (卡卡兽)   2014-09-06 17:18:00
@azureblaze,想到后来其实就是效率和空间在折磨,打入死结@GlobalBased:是的,有时觉得挺难挑的,用 vector<list>,list<vector>, 都没 vector 来得快 @@@suhorng : 这也是我目前想到最简单的方式 @@
作者: GoalBased (Artificail Intelligence)   2014-09-06 20:40:00
效能这个东西,等你发生效能问题再来处理就好了除非你做的东西本来就是为了效能..应该是这样说的吧不然0.01秒和0.02秒 效能差了一倍 但可能对你系统可能根本没有影响
作者: jackace (inevitable......)   2014-09-06 21:57:00
这种东西跟你的data有密切关系 不能以一论之
作者: azureblaze (AzureBlaze)   2014-09-06 23:47:00
有种说法是插头尾插中间有怀疑的时候用vector就对了vector在cache上的效能通常会压胜其他缺点真的发现有问题要改也不会太麻烦
楼主: EdisonX (卡卡兽)   2014-09-07 00:53:00
@Goal~:我知道你说的,不过有时"部份功能"就是这么要求Orz@azureblaze:这结论真重要了,谢谢 :D
作者: Killercat (杀人猫™)   2014-09-07 14:33:00
可能跟原文无关,我猜原po其实是project碰到scalingissue? 我会建议直接profile/unit test催下去了gap用猜的按我的经验是10猜9错 命中率超惊人的 :P
作者: fanntone (我是胖子)   2014-09-08 16:24:00
大量的插入或删除等操作就要考虑用hash去实作如果你的资料量到达上百万的list的话就要考虑
楼主: EdisonX (卡卡兽)   2014-09-08 20:13:00
@Killercat : 我没听过 scaling issue, 跪求翻译 @@
作者: Killercat (杀人猫™)   2014-09-08 20:31:00
噢就是因为大量资料造成的效能问题的意思
楼主: EdisonX (卡卡兽)   2014-09-08 20:59:00
@Killercat : 是你说的没错, 资料量真不小...

Links booklink

Contact Us: admin [ a t ] ucptt.com