使用bitset应注意的问题

template <size_t N> class bitset;
 

1、同数组一样,N为bitset的类型的一部分,N必须为编译时常量。

2、同数组一样,N一旦确定后就不能修改。

3、当用bitset进行大量数据处理时,注意变量声明的位置。如:

在内存1G的情况下,给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。

这时就可以考虑用bit来代替int数据。即分配一个40亿bit长度大空间,如果包含数A,则将该空间的第A位设置为1。如:第文件包含数12435,则将第12435个bit设置为1;若不包含,则设置为0;这样原本需要40*4=160亿Byte (16G)的空间就被压缩到了40亿/8=5亿Byte(500M)的空间里。

stl中有两个现成的模板可以使用。vector<bool>和bitset。两个模板都是使用位(bit)来存储的。

若要使用bitset解决上面的问题,一定不能将bitset声明为局部变量!!!!!

看下面的代码:

int main()
{
    bitset<4000000000> myset;
    // ........
}
这段代码看似没什么问题,但可以肯定,它无法运行。因为bitset声明为了局部变量,那就意味着该变量的空间要在栈上分配。500M的空间足以导致栈溢出!!!!

解决方法有两种:

①将myset声明为全局变量。

②将myset声明为指针,然后用new动态分配空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值