使用bitset应注意的问题

来源:互联网 发布:旺铺 和淘宝区别 编辑:程序博客网 时间:2024/05/18 02:09
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动态分配空间。

0 0