免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5106 | 回复: 17
打印 上一主题 下一主题

vector<bool> 内部实现? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-21 20:25 |只看该作者 |倒序浏览
记得在哪看过C++存的时候做了特化,这种特化对存储的影响是怎样的?我还需要对他再做压缩编码来减少存储开销吗?

[ 本帖最后由 modoke 于 2009-12-21 20:28 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2009-12-21 20:38 |只看该作者

回复 #1 modoke 的帖子

论坛徽章:
0
3 [报告]
发表于 2009-12-21 20:45 |只看该作者

回复 #2 OwnWaterloo 的帖子

thx! 可惜STL没有提供压缩方法, 还得自己写

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2009-12-21 20:49 |只看该作者

回复 #3 modoke 的帖子

没有提供压缩方法是什么意思?

论坛徽章:
0
5 [报告]
发表于 2009-12-21 20:52 |只看该作者

回复 #4 OwnWaterloo 的帖子

比如 分段长度压缩编码 之类的 对稀疏矩阵、向量的压缩

这是空间开销的要求,
另外在时间开销上,用vector<bool>来实现位图,会不会将位运算的“快速”的benifit 抹杀掉?

[ 本帖最后由 modoke 于 2009-12-21 20:55 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-12-21 20:55 |只看该作者

回复 #5 modoke 的帖子

vector<bool> 提供的类似于一种不存在的vector<bit> 。 稀疏矩阵肯定做不了了。
分段长度压缩编码和向量的压缩不懂……   不满足需要的话, 还是自己写吧

论坛徽章:
0
7 [报告]
发表于 2009-12-21 21:04 |只看该作者

回复 #6 OwnWaterloo 的帖子

谢谢楼上的帮助,还有一个最重要的问题
在时间开销上,用vector<bool>来实现位图,会不会将位运算的“快速”的benifit 抹杀掉?
比如一个位向量有32位,那么我们用一个int来实现,为了求出两个位向量x,y的与,需要这样: int x; int y; int z = x&y;
还有位运算的左、右移等等,然而要用vector<bool>来实现,可能需要跌代32次,并且vector<bool>的机器实现上会不会由于要维护一些组织信息,结果导致本身就会比单纯的位运算慢很多??
简而言之,我就是想问从时间开销上,vector<bool>和单纯的位运算差多少?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
8 [报告]
发表于 2009-12-21 21:21 |只看该作者

回复 #7 modoke 的帖子

固定大小的位图可以用bitset
http://www.cplusplus.com/reference/stl/bitset/

它的效率应该和用char,int, long实现位图是相同的。


vector<bool> 是可增长的, 它好像不支持位移操作。而且又不会暴露内部数据, 实现位移可能会有影响。
不过, 如果你需要的真的是可增长的位图, 用int*, long*去实现位移的话, 那些开销大的工作依然是逃不掉的。

boost好像有个dynamic_bitset。 不知道和vector<bool>有什么区别……

论坛徽章:
0
9 [报告]
发表于 2009-12-21 21:26 |只看该作者

回复 #8 OwnWaterloo 的帖子

太棒了,我最需要你在8楼的回复,就要这个!非常感谢!!!

论坛徽章:
0
10 [报告]
发表于 2009-12-21 21:27 |只看该作者
看过了微软的bitset的实现之后总结了一句,希望对苦于追求实现位图索引的速度的人有所帮助:别用容器了,自己用基础数据类型写吧!

[ 本帖最后由 modoke 于 2009-12-21 22:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP