C++近容器之bitset类学习总结
概述
- 近容器常见的有4种:C语言式数组、string、bitset、valarray。
- bitset类:使位集合更容易生成和操作。bitset(位集合)是用于表示位标志的集合。bitset在编译时是固定长度的。
具体用法
0. 头文件
#include<bitset>
1. 声明和初始化
const int size = 1024;
int bitNumber = 1;
bitset<size> b;//b中每位均初始化为0
bitset<size> b1;//b中每位均初始化为0
2. 常用函数(查询)
b.size();//返回b中的位数
b.count();//返回b中设置的位数
b.any();//在b中的位设置时返回true
b.none();//在b中的位没有被设置时返回true
b[bitNumber];//返回bitNumber的引用
b.at(bitNumber);//首先对bitNumber进行范围检查,如果在范围之内,at返回该位的引用,否则抛出out_of_range异常
b.test(bitNumber);//首先对bitNumber进行范围检查,如果在范围之内,test在位打开时返回true,位关闭时返回false,否则抛出out_of_range异常
if (b == b1)
cout << "b和b1相等";
if (b != b1)
cout << "b和b1不相等";
3. 常用函数(操作)
b.set(bitNumber);//bitNumber位设置为“开”
b.set();//b中的所有位设置为“开”
b.reset(bitNumber);//bitNumber位设置为“关”
b.reset();//b中的所有位设置为“关”
b.flip(bitNumber);//将bitNumber位翻转
b.flip();//将b的所有位翻转
4. 应用
4.1 判断是否为质数
bool checkPrimeNumber(int num) {
const int size = 1024;
bitset<size>b;
b.flip();//将所有位设置为打开
int finalBit = sqrt(b.size()) + 1;
//将所有非质数的位设置为关闭
for (int i = 2; i < finalBit; i++) {
if (b.test(i)) { //检查边界,若位为打开则返回true
for (int j = 2 * i; j < size; j += i) { //将所有i的倍数的位设置为关闭
b.reset(j);
}
}
}
if (b[num])
return true;
else
return false;
}
int main() {
int num = 0;
cout << "请输入1~1023要判断的数:";
cin >> num;
while (num != -1) {
cout << num << (checkPrimeNumber(num) ? "是" : "不是") << "质数" << endl;
cout << "请输入1~1023要判断的数:";
cin >> num;
}
system("pause");
}