C++——bitset

顾名思义,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 评论

留下您的评论.