bieset是一种类似于数组的数据结构,需要引用 <bitset>头文件才能使用
- 定义方法
bitset <x> xxx; //定义一个大小为x,名称为xxx的bitset类型的变量
bitset <x> xxx(y) //赋初值为y,进行同上的定义
char c[] = "XXXXXX";
bitset <x> xxx(c); //以字符数组c的内容为初值,进行同上的定义。注意c中的内容只能是'0'或'1',否则会出事。
输出可以正常输出。
- 时间复杂度
STL肯定慢啊。。。
上网查了一下,执行一次位运算大概是 (n为内容大小)
- 操作符
bitset<x> xxx (string"XXXXXX") //道理同上
//支持 &= |= ^= <<= >>=
// ~ << >>
//== !=
//& | ^
//内容可以用数组的引用方法
for(int i = 0; i < x; ++i) //注意下标从0开始
cout << xxx[i] << " ";
puts("");
//也可以单独引用下标进行赋值,类似于数组。
- 函数
bitset <x> xxx;
xxx.count() //xxx中1的个数
xxx.size() //xxx的大小(有效元素)
xxx.test(y) //测试下标y是否为1,返回TRUE或FALSE
xxx.any() //xxx中是否有1
xxx.none() //xxx中是否没有1
xxx.all() //xxx是否全部为1
补充一下,使用[]进行判断无法防止越界,而使用test函数可以进行检查,所以推荐使用test函数。
- 类型转换
bitset <x> xxx;
string s =xxx.to_string(); //转换成string类型
unsigned long long n = xxx.to_ullong() //转换成unsigned long long类型
bitset的大体讲解就差不多了。
最后总结一下,关于二进制的处理可以考虑使用bitset,优点是方便、相对来说节省空间,但缺点就是以空间换时间,时间要相对慢一些,请各位慎重使用。
2020 RP++