acm 奇技淫巧 bitset

1.定义与初始化
在定义 bitset 时,要明确 bitset 有多少位,这个位数是整形常量

(tips:如果长度和输入的数m有关,在做翻转操作以后再统计时候会多算,一个可以的做法是设置一个长度为m,所有位上都是1的位串,然后翻转之后先与一下。类似的技巧还有很多。)

()
bitset<n> b;                          //b 有 n 位,每位都是 0
bitset<n> b(u);                     //b 是 unsigned long 型 u 的一个副本
bitset<n> b(s);                      //b 是 string 对象 s 中含有的位串的副本,这个s 必须是位串,也就是二进制码串
bitset<n> b(s, pos, n);        //b 是 s 中 从位置 pos 开始的 n 个位的副本

2.bitset 的操作
b.any()              //b 中是否存在置为 1 的二进制位?
b.none()             // 和b.any() 效果一样
b.count()            //b 中不存在置为 1 的二进制位吗?

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

cout << b << endl;

作者: CrazyKK

ex-ACMer@hust,stackoverflow-engineer@sensetime

说点什么

您将是第一位评论人!

提醒
wpDiscuz