免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2012-02-29 11:30 |只看该作者
x5miao 发表于 2012-02-29 11:13
觉得迭代器没什么啊,就是对指针功能的抽象并添加一些安全功能。


如果是C开发,我这种保存list中某个元素地址的做法很常见。

但是使用C++/STL的话,我好想很少看到保存iterator的,它一般都是用在local环境中,比如,只限于一个函数内。所以不知的STL是不是有什么特别的解决办法。

不过逻辑上我也觉得应该是可以这么做的,不然list::iterator就缺少了基本的指针特性。

论坛徽章:
0
12 [报告]
发表于 2012-02-29 11:34 |只看该作者
rocklinux 发表于 2012-02-29 11:30
如果是C开发,我这种保存list中某个元素地址的做法很常见。

但是使用C++/STL的话,我好想很少看到保 ...



STL中很多算法返回值都是iterator,所以你说iterator能不能保存?

论坛徽章:
0
13 [报告]
发表于 2012-02-29 11:41 |只看该作者
可能是我个人偏好问题。。。

我真是觉得C++很丑陋,C++粉轻喷。。。

像使用构造析构函数要小心翼翼,不能产生异常等,小心内存泄漏,加上虚函数,继承就更要小心;使用try-catch异常太频繁会觉得流程混乱,我只愿意用返回值执行检查错误;STL模板调试困难。。。

如果用C的话,面向对象统统用函数指针表解决,内存管理由程序员负责;统一用返回值检查错;像linux中的list.h数据结构抽象完全可以取代STL;

论坛徽章:
0
14 [报告]
发表于 2012-02-29 12:08 |只看该作者
如果你在C里面把宏用的满天飞,错误有时用返回值,有时用全局变量,有时用signal,也一样会死人

别听那些所谓的“专家”,不用XXX特性就等于没有用C++

要按自己的方式用C++,google不也一样说不用异常吗,在自己的项目中,禁用大量的复杂用法,
只保留自己觉得好用的东东,C++也一样很舒服的,毕竟很多东西封装简化了

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
15 [报告]
发表于 2012-02-29 12:23 |只看该作者
我觉得你说的这个问题是你程序逻辑并不明确,和stl用法没多点关系,难道拿到了指针,就可以随便做操作了吗?
回复 2# longmm1988


   

论坛徽章:
0
16 [报告]
发表于 2012-02-29 12:58 |只看该作者
本帖最后由 x5miao 于 2012-02-29 12:58 编辑
phy0077 发表于 2012-02-29 12:23
我觉得你说的这个问题是你程序逻辑并不明确,和stl用法没多点关系,难道拿到了指针,就可以随便做操作了吗? ...


同意,大多数人对C++的了解程度还没到能够评价C++优劣的水平。

论坛徽章:
0
17 [报告]
发表于 2012-02-29 13:15 |只看该作者
x5miao 发表于 2012-02-29 11:34
STL中很多算法返回值都是iterator,所以你说iterator能不能保存?


我说了,除了STL之外。

我知道从语法和功能上讲当然可以。
我只是说这种设计好么,将iterator作为某个类的成员?因为我很少见到这种用法,我见到的大多都是声明的局部变量,见我前面的帖子。

论坛徽章:
0
18 [报告]
发表于 2012-02-29 13:16 |只看该作者
phy0077 发表于 2012-02-29 12:23
我觉得你说的这个问题是你程序逻辑并不明确,和stl用法没多点关系,难道拿到了指针,就可以随便做操作了吗? ...


为什么拿到指针不能随便操作?

论坛徽章:
0
19 [报告]
发表于 2012-02-29 13:22 |只看该作者
drangon 发表于 2012-02-29 12:08
如果你在C里面把宏用的满天飞,错误有时用返回值,有时用全局变量,有时用signal,也一样会死人

别听那些 ...


的确,很多东西滥用都会成灾。

C里面也有枚举和内联函数,只要有好的习惯,这些不用担心。

我也不是说C++不好,它当然会提供很多方便。我主要想说,C完全能满足C++提供的所有功能,而且没有C++潜在的复杂度。

论坛徽章:
0
20 [报告]
发表于 2012-02-29 14:50 |只看该作者
rocklinux 发表于 2012-02-29 11:27

准确的说,是希望只搜索一次,保存得到的元素地址,在后面对该元素的操作直接通过保存的地址,最后删除元素。这样除了第一次搜索外,其它操作都是常数代价


既然其他地方都保存了元素地址,那你要把这些元素放到一个容器干啥?直接new出来分散保存不就行了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP