ACM/ICPC竞赛之STL--bitset

来源:互联网 发布:squid 默认端口 编辑:程序博客网 时间:2024/05/16 06:45

ACM模版

bitset

STL 的头文件中 <bitset> 中定义了模版类 bitset,用来方便地管理一系列的 bit 位的类。bitset 除了可以访问指定下标的 bit 位以外,还可以把它们作为一个整数来进行某些统计。

bitset 模板类需要一个模版参数,用来明确指定含有多少位。

定义 bitset 对象的示例代码:

const int MAXN = 32;bitset<MAXN> bt;            //  bt 包括 MAXN 位,下标 0 ~ MAXN - 1,默认初始化为 0bitset<MAXN> bt1(0xf);      //  0xf 表示十六进制数 f,对应二进制 1111,将 bt1 低 4 位初始化为 1bitset<MAXN> bt2(012);      //  012 表示八进制数 12,对应二进制 1010,即将 bt2 低 4 位初始化为 1010bitset<MAXN> bt3("1010");   //  将 bt3 低 4 位初始化为 1010bitset<MAXN> bt4(s, pos, n);//  将 01 字符串 s 的 pos 位开始的 n 位初始化 bt4

bitset 基本操作:

bt.any()        //  bt 中是否存在置为 1 的二进制位?bt.none()       //  bt 中不存在置为 1 的二进制位吗?bt.count()      //  bt 中置为 1 的二进制位的个数bt.size()       //  bt 中二进制位的个数bt[pos]         //  访问 bt 中在 pos 处的二进制位bt.test(pos)    //  bt 中在 pos 处的二进制位是否为 1bt.set()        //  把 bt 中所有二进制位都置为 1bt.set(pos)     //  把 bt 中在 pos 处的二进制位置为 1bt.reset()      //  把 bt 中所有二进制位都置为 0bt.reset(pos)   //  把 bt 中在pos处的二进制位置为0bt.flip()       //  把 bt 中所有二进制位逐位取反bt.flip(pos)    //  把 bt 中在 pos 处的二进制位取反bt[pos].flip()  //  同上bt.to_ulong()   //  用 bt 中同样的二进制位返回一个 unsigned long 值os << bt        //  把 bt 中的位集输出到 os 流

ExampleOne:

#include <iostream>#include <bitset>using namespace std;const int MAXN = 32;bitset<MAXN> bt(0x3f3f3f3f);int main(){    cout << bt << '\n';    return 0;}

程序执行的输出结果为:
00111111001111110011111100111111

原创粉丝点击