bitset是一种内含bit或bool值且大小固定的数组,其大小由初始化的值决定。
bitset相比于vector的优点在于节省空间,而且只提供0和1的设置操作,当我们统计某项任务是否完成或某一项是否为true的时候,可以使用bitset来满足需求。
当我们需要按位操作的时候,也可以使用bitset来进行实现。
本文介绍bitset容器的一系列成员函数与基本操作使用
以下是代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <bitset>
using namespace std;
int main() {
// 初始化10个bit位, 0000000000
bitset<10> b;
// b.set(): 设置第0位为true, 0000000001
b.set(0);
// b.set(): 设置第9位为true, 1000000001
b.set(9);
// 注意 b.set() 不能越界,否则在运行期间会中断程序
// b.set(11);
// 结果输出为二进制形式:1000000001
cout << "b = " << b << endl;
// b.to_string(): 转换为字符串
cout << "s = " << b.to_string() << endl;
// b.to_ulong(): 转化为 unsigned long 类型, 二进制转为十进制
cout << "unsigned long num = " << b.to_ulong() << endl;
// b.to_ullong(): 转化为 unsigned long long 类型, 二进制转为十进制
cout << "unsigned long long num = " << b.to_ullong() << endl;
// b.size(): 统计size
cout << "b.size() = " << b.size() << endl;
// "b.all(): 检查是否所有位都被置为1,返回一个bool值
cout << "b.all() = " << b.all() << endl;
// b.any(): 检查是否任意一个位被置为1,返回一个bool值
cout << "b.any() = " << b.any() << endl;
// b.none() : 检查是否所有位都被置为0,返回一个bool值,底层实现为对 any() 取反 : !any()
cout << "b.none() = " << b.none() << endl;
// b.reset(): 将所有位置为0
cout << "b.reset() = " << b.reset();
cout << " b.any() = " << b.any() << endl;
// b.flip(): 将所有位置的值置为相反值,1变为0,0变为1
cout << "b.flip() = " << b.flip();
cout << " b.all() = " << b.all() << endl; // 不要将此行与上一行放在一起,因为不确定编译器先编译那一个操作
// b.test() : 检查某一个位置是否被设置为1
if (b.test(0)) cout << "location 0 is set to 1" << endl;;
return 0;
}
执行结果如下:
b = 1000000001
s = 1000000001
unsigned long num = 513
unsigned long long num = 513
b.size() = 10
b.all() = 0
b.any() = 1
b.none() = 0
b.reset() = 0000000000 b.any() = 0
b.flip() = 1111111111 b.all() = 1
location 0 is set to 1
谢谢阅读!