位图
位图概念
计算机中通常以位bit为数据最小存储单位,只有0、1两种二进制状态,这决定了位可以用来保存某一项条件yes/no的信息,且这种方式是占用系统内存最小的方式。因此,C++中标准库提供bitset类,以位bit为最小单位,存储数据,主要用于提供位级别的操作。
位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。
位图的使用
初始化bitset,初始化同时给定bit的个数n
bitset<16> foo;
bitset<16> bar(0xfa2);
bitset<16> baz("0101111001"); //从右往左读取,如果字符串长度小于n位数,补0
foo: 0000000000000000
bar: 0000111110100010
baz: 0000000101111001
bitset操作汇总
位图模拟实现
template<size_t N>
class bitset {
bitset()
{
_bt.resize(N / 8 + 1,0);
}
//将x位设位1
void set(size_t x)
{
size_t i = x / 8;
size_t j = x % 8;
_bt[i] |= (1 << j);