详解STL中关于bitset的使用方式

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

谢谢阅读!

上一篇:c-是否可以将位集转换为整数字符数组?


下一篇:C++的bitset相关