【破烂集】大佬的一个技巧——bitset优化

本文探讨了bitset在大bool数组中的应用,特别是在邻接矩阵中节省空间和提高效率。bitset能够处理任意长度的数据,提供数千位的大数据操作便利,且在上千规模时展现明显速度优势。文章还介绍了使用_find_first()和_find_next()函数快速查找特定位的有效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前大佬的题解里面用到了这个优化,还是比较实用的,特别是在大bool数组中用了这个省空间省时间(比如邻接矩阵用这个会快很多),具体的用法各种博客里面有很多,百度搜索bitset即可,在这里就不赘述,我就说一些我的测试和大佬的比较精髓的代码。
首先这个东西理论上是可以按位进行操作和定义的,所以从空间来说应该应该会节省一些,不过从测试的结果来看,这点只对大数组有效,感觉任何bitset都会至少占用64位的空间,即使是bitset<1> ,而且从时间来看也只有上了规模的bitset(上千)才会有明显的速度优势,当然是在不计算bitset的各种黑科技函数的情况下,我个人认为bitset的优势有两点,第一,任意的长度,不像bool一样一次要8个字节,而如果用long long或int这种做位运算优化的话也只能取32的倍数,最多用char是8的倍数,就很不灵活,另外由于bitset一次可以搞几千位,所以这个时候的优势就显示出来了,大数据操作的便捷是他的又一优势。
我也不太清楚bitset有什么黑科技,有心人可以深度查阅一下,不过看了大佬的代码感觉这个还挺实用的。

for(k = bit._Find_first() ; k < M ; k = bit._Find_next(k))

相当于可以用类似找lower_bit的方法找最后一位的位数,速度比一个一个找更快,相当实用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值