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
①至④运行截图
附全文代码
#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;
}