#include<iostream>
#include<cstring>
#include<string.h>
using namespace std;
class Bitmap{
private:
char *m;//比特图所存放的空间M[]
int n;//容量为N*sizeof(char)*8比特
public:
void init(int _n){//初始化
m=new char[n=(_n+7)/8];
memset(m,0,n);
}
Bitmap(int n){
init(n);
}
void set(int k){//设第k位为1
expand(k);
m[k>>3]|=(0x80>>(k&0x07));
}
void clear(int k){//设第k位为0
expand(k);
m[k>>3]&=~(0x80>>(k&0x07));
}
bool test(int k){//看第k位是0是1
expand(k);
return m[k>>3]&(0x80>>(k&0x07));
}
void expand(int k){//扩张
if(k<8*n) return;
char* oldM=m;
init(2*k);
memcpy(m,oldM,n);
delete []oldM;
}
string bits2string(int _n){//转为string
expand(_n-1);
string s;
for(int i=0;i<n;i++){
char x=test(i)?'1':'0';
s+=x;
}
return s;
}
};
代码参考数据结构书