顾名思义,bitset就是比特集合,用于位运算等操作。
固定长度,支持随机访问
同替他模板类一样,bitset的使用方法和其他模板类差别不大
演示
#include <iostream>
#include <bitset>
#include <algorithm>
using namespace std;int main()
{const unsigned bit_num = 13;bitset<13> b1 (0xbeef);for(int i = bit_num -1;i>=0;--i)cout << b1[i];cout << endl;bitset<20> b2 (0xbeff);for(int i= 20-1;i>=0;--i)cout << b2[i];return 0;
}
运行结果
演示
#include <iostream>
#include <bitset>
using namespace std;int main()
{string bit_string = "1001001100";//const unsigned bit_length = bit_string.length(); //error bit_length不能够编译时确定,所以他不是一个常量表达式bitset<10> b1 (bit_string); // b1 is 1001001100bitset<4> b2(bit_string,5,4,'0','1');for(int i = 4-1;i>=0;--i){cout << b2[i];}cout << endl;bitset<4> b3(bit_string,bit_string.length()-4);for(int i=4-1;i>=0;--i){cout << b3[i];}return 0;
}
运行结果
可以看出,类似头迭代器和超尾迭代器的规则在bitset的构造时候依然适用
先介绍一些概念
置位:将某一位设置为1
复位:将某一位设置为0
bitset方法
演示
用一个bitset来存放10人的成绩及格状况
#include <iostream>
#include <bitset>
#include <algorithm>
#define grade_table GT
using namespace std;int main()
{const unsigned stu_num = 10;bitset<stu_num> grade_table;cin >> grade_table;if(GT.none()) //or !GT.any()cout << "没有人及格" << endl;elsecout << "一共有" << GT.count() << "人及格" << endl;string bit_string = GT.to_string();cout << ".to_string()返回了一个比特字符串: " << bit_string << endl;cout << "老师大发慈悲,所有人都过了,好耶!" << endl;GT.set();cout << GT.to_string() << endl;GT.reset(1);cout << "但是一号小伙得罪了老师,老师没有给他过: " << GT.to_string() << endl;cout << "不知道将这个比特串转换为无符号整形有什么意义的操作" << GT.to_ulong();return 0;
}
运行结果
可以看见,适用bitset比适用传统的位运算要方便许多,不用我们自己设计mask,不用进行令人头疼的位移操作,甚至输入输出比特串也经为我们定义好了。
一些其他的东西
上面可以看出bitset为了泛型的功能,有着zero和one这两个东西,提供让用户自定义的功能
一些有趣的东西
#include <iostream>
#include <bitset>
#include <algorithm>
using namespace std;int main() {const string str = "ynynyynnyn";bitset<10> b(str, 0, string::npos, 'n', 'y');cout << b << endl;cout << b.to_string('n','y');return 0;
}
可以猜猜运行的结果时什么
相关链接
bitset - C++ Reference (cplusplus.com)http://www.cplusplus.com/reference/bitset/bitset/?kw=bitset
本文链接:https://my.lmcjl.com/post/3811.html
展开阅读全文
4 评论