免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: rocklinux
打印 上一主题 下一主题

list::iterator适合像普通指针一样被保存(cache)么 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-02-29 15:07 |只看该作者
回复 20# sonicling


    因为这些元素不只一个使用者啊,所以要提供一个数据结构保存。

论坛徽章:
0
22 [报告]
发表于 2012-02-29 15:26 |只看该作者
回复 21# rocklinux


    总觉得传递和保存iterator怪怪的,这不是iterator的长项。还是直接使用指针比较好。

论坛徽章:
0
23 [报告]
发表于 2012-02-29 16:07 |只看该作者
sonicling 发表于 2012-02-29 15:26
回复 21# rocklinux


我也这么觉得,所以才发帖一问。

如果用普通指针的话就是自己实现list,就像我在C中做的一样。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
24 [报告]
发表于 2012-02-29 16:26 |只看该作者
回复 22# sonicling

STL确实缺少T*到container<T>::iterator转换的方法……

于是保存container<T>::iterator很不干净……  比如不知道它的确切大小……
而保存T*又没法用于algorithm……

哎……

论坛徽章:
0
25 [报告]
发表于 2012-02-29 16:34 |只看该作者
回复 24# OwnWaterloo


    对,iterator不干净,所以只用于局部。

论坛徽章:
0
26 [报告]
发表于 2012-02-29 18:38 |只看该作者
感觉是LZ设计的问题,为什么还要保存iterator?
如果你第一次遍历完之后是一对一的指向iterator,那这个list没有存在的必要,直接指向这个struct就好了。

论坛徽章:
0
27 [报告]
发表于 2012-02-29 19:50 |只看该作者
本帖最后由 rocklinux 于 2012-02-29 19:54 编辑

回复 26# scgywx

如果不保存iterator,怎么能线性时间将这个元素从STL的list删除?

前面说了,使用list保存数据是因为这些元素不是只有一个使用者。

当然我不是说我的设计没问题,只是目前还没有理由说明使用list有什么问题,我就是想知道对于这种场景使用STL的话有什么更好的设计。

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
28 [报告]
发表于 2012-03-01 00:20 |只看该作者
回复 18# rocklinux


    你可以考虑用vector, 将删除操作解释为disable相应元素, 并不真正删除。
    对链表进行大量的删除操作, 不见的能很高效。

论坛徽章:
0
29 [报告]
发表于 2012-03-01 01:33 |只看该作者
rocklinux 发表于 2012-02-29 19:50
回复 26# scgywx

如果不保存iterator,怎么能线性时间将这个元素从STL的list删除?


这不是STL能解决的。iterator的优势在于泛型和概念,一旦被保存就依赖于具体实现,这个相当不靠谱。

多方引用的对象要在线性或常数时间删除有两种方法:reference counter 和 pool。如果是树结构(没有循环引用),可以使用前者,如果是一般图结构就用后者。pool 负责对象的独立创建,集中销毁,并且把 pool 放在生命期确定的对象中,这样比 reference counter 管理起来更简单。

论坛徽章:
0
30 [报告]
发表于 2012-03-01 09:10 |只看该作者
回复 29# sonicling


事实上我就是想做一个pool,pool会有多个容器存储元素,代表不同的状态,我希望元素在这几个容器之间转移(从一个容器删除,加入到另一个容器)时能尽量快捷。所以产生我问的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP