标准库——bitset类型

关于标准库中sring、vector、set、map、queue、stack 、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。

// 需要包含头文件和声明:
#include
using std::bitset;

bitset对象的定义和初始化

bitset类型对象的区别仅在其长度,而不在其类型。定义时,<长度>。

标准库——bitset类型_第1张图片

bitset<32> bitvec;  // 32bits, all zero,访问时,从低到高,0-31(low-high)

在 unsigned long 的机器上,十六进制 0xffff  表示二进制位16个1,16个0 ; 

bitset<16> bitvec1(0xffff);  // 0-15 set to 1, 16-31 舍去

bitset<32> bitvec1(0xffff);  // 0-15 set to 1, 16-31 set to 0

cout << bitvec1 << endl;    // 输出 00000000000000001111111111111111(Hige---low)

bitset<128> bitvec1(0xffff);  // 0-15 set to 1, 16-31 set to 0,32-127 set to 0;

用 string 对象初始化 bitset 对象

string strval("1100");

bitset<32> bitvec4(strval);    // low-high: 00 11 +28个0

string str("111100001100100000");

bitset<32> bitvec5(str, 5, 4);    // 从第5个位置,取4个,

bitset<32> bitvec6(str, str.size()-4);    // 只取最后4个数

bitset对象上的操作

标准库——bitset类型_第2张图片

标准库——bitset类型_第3张图片

测试

bitset<32> bitvec;  // 32 bits, all 0

bool is_set = bitvec.any();  // false

bool is_not_set = bitvec.none();  // true

size_t bits_set = bitvec.count();  // 返回1的个数

size_t sz = bitvec.size();  // return 32

for(int index = 0; index != 32; index += 2)
{
    bitvec[index] = 1;
}

for(int index = 0; index != 32; index += 2)
{
    bitvec.set(index);   // 偶数下标为1
}

C++ 标准库的bitset还是比较好用的,之前为了练习bit, 还自己写了一个bitmap算法,链接如下:

https://blog.csdn.net/qq_34732729/article/details/100121712

你可能感兴趣的:(数据结构与算法)