如果程序中经常要对矩阵进行与或非等运算,可以把整型数组的矩阵转化成char型的bitmap,通过直接的位运算进行这些与或非操作会大大地提高效率。
class bitmap {char *buf; public:int buf_len;//buf的长度int bit_len;//bitmap的位数bitmap(int *group,int group_len){bit_len=group_len;buf_len=group_len/8+1;buf=new char[buf_len];memset(buf,0,sizeof(char)*buf_len);int i;for(i=0;i<group_len;++i){if(group[i])set(i);}}~bitmap(){delete []buf;}void set(int n);int get(int i);void set_and(const bitmap &m); };void bitmap::set(int n){int i=n/8;int offset=n%8;unsigned char mask=(0x80>>offset);buf[i]|=mask; }int bitmap::get(int i){int index=i/8;int offset=i%8;unsigned char mask=(0x80>>offset);if(buf[index] & mask)return 1;elsereturn 0; }void bitmap::set_and(const bitmap &m){int i;for(i=0;i<buf_len;++i){buf[i]&=m.buf[i];//直接对8位的char按位与 } }int main() {int g[10]={1,1,0,0,1,0,1,0,1,0};int z[10]={1,0,0,1,1,0,1,1,0,0};bitmap bg(g,10);bitmap bz(z,10);bg.set_and(bz);int i;for(i=0;i<10;++i){cout<<bg.get(i)<<" ";}cout<<endl;return 0; }