【C++】 蓝桥必备-STL<Part 8-bitset>

89 阅读2分钟

STL第八部分bitset

✨1. bitset【压位】

每个元素都为0或1,都只占据1bit空间,可以理解为二进制数组

①头文件

#include <bitset>

② 初始化

// 初始化bitset
bitset<5> b1;   // 默认全为0
bitset<5> b2(2);   // 将2用二进制表示,共5位,前面用0占位 
string s1 = "0101110";
bitset<10>  b3(s1);  // 将s1用10位补全,前面用0占位 
std::cout << "b1:" << b1 << endl; 
std::cout << "b2:" << b2 << endl; 
std::cout << "b3:" << b3 << endl;

④ 常用函数

1. count() 统计1的个数

std::cout << "b3中1的个数:" << b3.count() << endl; // 4

2. any() 判断是否有1

std::cout << "b3中是否有1:" << b3.any() << endl; // 1

3. none() 判断是否全为0

std::cout << "b3中是否全为0:" << b3.none() << endl;  // 0

4. set() 把所有位置赋值为1

std::cout << "把b3所有位置赋值为1:" << b3.set() << endl; // 1111111111

5. set(k,v) 把k位置赋值为v

std::cout << "把b3的1位置赋值为0:" << b3.set(1,0) << endl;  // 1111111101

6. reset() 把所有位变成0

std::cout << "把b3的所有位置赋值为0:" << b3.reset() << endl; // 0000000000

7. flip() 把所有位取反 1->0|0->1

std::cout << "把b3的所有位置按位取反:" << b3.flip() << endl; // 1111111111

8. flip(k)

std::cout << "把b3的所有位置按位取反:" << b3.flip(5) << endl; // 1111011111

image.png

①至④运行截图

附全文代码

#include <iostream>
#include <bitset>
#include <string>

using namespace std;

int main(){
	
	// 初始化bitset
	bitset<5> b1;   // 默认全为0
	bitset<5> b2(2);   // 将2用二进制表示,共5位,前面用0占位 
	string s1 = "0101110";
	bitset<10>  b3(s1);  // 将s1用10位补全,前面用0占位 
	std::cout << "b1:" << b1 << endl; 
	std::cout << "b2:" << b2 << endl; 
	std::cout << "b3:" << b3 << endl;
	
	// 常用函数
	std::cout << "b3中1的个数:" << b3.count() << endl; // 4
	std::cout << "b3中是否有1:" << b3.any() << endl;  // 1
	std::cout << "b3中是否全为0:" << b3.none() << endl;  // 0
	std::cout << "把b3所有位置赋值为1:" << b3.set() << endl; // 1111111111
	std::cout << "把b3的1位置赋值为0:" << b3.set(1,0) << endl;  // 1111111101
	std::cout << "把b3的所有位置赋值为0:" << b3.reset() << endl; // 0000000000
	std::cout << "把b3的所有位置按位取反:" << b3.flip() << endl; // 1111111111
	std::cout << "把b3的所有位置按位取反:" << b3.flip(5) << endl; // 1111011111
	return 0;
}