STL中bitset的用法
终于又来写博客了 ==
bitset存储的是二进数位,就和一个bool性数组差不多。用法上和数组的操作方式也差不多。
每位只占一个字节,大大优化了空间,可以通过数组形式访问。
bitset定义
可以用以下几种方式定义bitset,值得注意的是,bitset在定义的时候必须定义大小,这里8便是我们定义的长度,定义一个空bitset时所有值默认为0;
1 bitset<8> b; 2 bitset<8> bit(8); 3 bitset<8> tp1(string("01010101")); 4 bitset<8> tp2(bit); 5 6 cout << " b = " << b << endl; 7 cout << "bit = " << bit << endl; 8 cout << "tp1 = " << tp1 << endl; 9 cout << "tp2 = " << tp2 << endl;
上面代码的输出结果为
1 b = 00000000 2 bit = 00001000 3 tp1 = 01010101 4 tp2 = 00001000
bitset的运算
猜都能猜到bitset肯定是支持位运算的,是的bitset可以直接做位运算
1 bitset<4> tp1(string("0101")); 2 bitset<4> tp2(string("1110")); 3 4 cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl; 5 cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl; 6 cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl; 7 cout << "(~tp1) = " << (~tp1) << endl; 8 9 cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl; 10 cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl; 11 cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl; 12 13 cout << "(tp1 <<= 1) = " << (tp1 <<= 1) << endl; 14 cout << "(tp1 ^= tp) = " << (tp1 ^= 4) << endl; 15 16 cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl; 17 cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;
这就没什么好说的了,运行结果为
1 (tp1 & tp2) = 0100 2 (tp1 | tp2) = 1111 3 (tp1 ^ tp2) = 1011 4 (~tp1) = 1010 5 (tp1 &= tp2) = 0100 6 (tp1 |= tp2) = 1110 7 (tp1 ^= tp2) = 0000 8 (tp1 <<= 1) = 0000 9 (tp1 ^= tp) = 0100 10 (tp1 == tp2) = 0 11 (tp1 != tp2) = 1
bitset的函数
既然也是STL的东西,肯定会封装了一下函数,bitset是没有迭代器的。
常用函数有
1 bit.size(); //返回大小(长度) 2 bit.count(); //返回1的个数 3 bit.any(); //返回是否有1 4 bit.none(); //返回是否没有1 5 bit.set(); //全部置为1 6 bit.set(p); //将p+1(下标从0开始!!)位置为1 7 bit.set(p,n); //将p+1位置为n 8 bit.reset(); //全部置为0 9 bit.reset(p); //将p+1位置为0 10 bit.flip(); //全部取反 等同于 (~bit) 11 bit.flip(p); //将p+1位取反 12 bit.to_ulong(); //返回转换为 unsigned long 的结果,超范围会报错 13 bit.to_ullong();//返回转换为 unsigned long long 的结果,超范围报错 14 bit.to_string();//返回转换为 string 的结果
当题目涉及到位运算时,就可以使用bitset快速的在整形,string,二进制三种类型中完成操作转换。并且可以在某些数据结构中直接套用bitset完成二进制的对位操作。还有就是bitset很好用。完XD
STL的容器基本讲的差不多了。熟练掌握STL好处我也就不多说了= = ,自己在做题的过程中慢慢琢磨熟练吧。