回 帖 发 新 帖 刷新版面

主题:[讨论]位(bitset)读写的效率

现有大量的布尔类型数据,为了节省空间,把数据以bitset<32>类储存,实现方法如下:
vector<bitset<32> > vb(10000000);
但是在读写时下标需要重新计算,如读写第100个数据时则要:
vb[100/32].set(100%32)
vb[100/32][100%32]
如果需要历遍所有数据时运算量会比较大,请问有何方法提高效率呢?

回复列表 (共6个回复)

沙发

直接用偏移操作可以吗?

板凳

遍历数据我这样设想过:
vector<bitset<32> >::iterator iter
int Bit=0;
bool result;
for (iter=vb.begin(); iter!=vb.end();)
{
    if(Bit<32)
    {
        result=iter[Bit];
        ++Bit;
     }
    else
    {
        iter++;  
        Bit=0;
        result=iter[Bit];  
        
     }    
}
不知道有没有更好的方法呢?

3 楼

用>>5代替/32
用& 0x1F代替%32

4 楼

谢谢版主的指教!

5 楼

[quote]用>>5代替/32
用& 0x1F代替%32[/quote]

  实际上,现在的任何编译器都进行了上面的优化,否则,这个编译器还有什么用?
  因此,用这样的语句:vb[100/32].set(100%32)、vb[100/32][100%32]实际上已经是很高效的了,因为编译器已经将其优化了。

                

6 楼

我也想过这个问题,为了增加代码的可读性,还是直接使用除法比较好

我来回复

您尚未登录,请登录后再回复。点此登录或注册