bitset 一个卡常必备神器

std::bitset 是标准库中的一个存储 0/1 的大小不可变容器。严格来讲,它并不属于 STL——————————————源自于oi-wiki的介绍。

简单来说bitset就是一种类似于数组的结构(只能存1 or 0)且可以优化内存空间,一个元素只占1bit   因此计算一些信息时,所需时间也是其1/32.

复杂度:一般记作O(n/32) 但这不太严谨   还有的记作O(n/w)其中w=32(计算机的位数),这种记法较为普遍接受。

食用方法:

1.先开个头文件: 

#include <bitset>

2.指定大小:

bitset<1000> bz;// 下面的都是用这个bz来解释。

3.定义与初始化

bitset类型可以用string和整数初始化(整数转化成对应的二进制)

#include<iostream>
#include<bitset>
#include<cstring>
using namespace std;
int main()
{
    bitset<23>bit (string("11101001"));
    cout<<bit<<endl;
    bit=233;
    cout<<bit<<endl;
    return 0;
}
输出
00000000000000011101001
00000000000000011101001

4.基本运算

bitset支持所有位运算

bitset<4>s1(string("1001"));
    bitset<4>s2(string("1000"));
    s1[1] = 1;                    
    cout<<s1[0]<<endl;              //1
    cout<<s1<<endl;                 //1011
    cout<<(s1==s2)<<endl;           //0
    cout<<(s1!=s2)<<endl;           //1
    cout<<(s1^s2)<<endl;            //0011
    cout<<(s1&s2)<<endl;            //1000
    cout<<(s1|s2)<<endl;            //1011
    cout<<(~s1)<<endl;              //0100
    cout<<(s1>>1)<<endl;            //0101

5.常用函数

count( ): 返回 true 的数量

size( ):   返回 bitset 的大小

any( ):  若存在某一位是 true 则返回 true ,否则返回 false 

none( ): 若所有位都是 false 则返回 true ,否则返回 false 

set( ): 将整个 bitset 设置成 true 

set(pos,va1=true/false) 将某一位设置成  true/false    例如 

bz.set(2,true)||bz.set(2,false)||bz.set(2)

reset( ):将整个 bitset 设置成 false 

reset(pos): 将某一位设置成 false  相当于 set(pos ,false) 例如

bz.reset(2)//////////////////////补充前面的 bz.set()////////bz.reset()

flip( ):  翻转每一位(相当于异或一个全是1的 bitset)

flip(pos):  翻转某一位

_Find_ first( ):  返回 bitset 第一个 true 的下标,若没有 true 则返回 bitset 的大小

_Find_next(pos):  返回 pos 后面(下标严格大于 pos 的位置)第一个 true 的下标,若 pos 后面没有 true 则返回 bitset 的大小

把两个相结合就可以发生奇妙的反应

#include<bits/stdc++.h>
int main() {
	std::bitset<1001> bz;
	bz.set(2); bz.set(4); bz.set(233);
	for(int i = bz._Find_first(); i != bz.size(); i = bz._Find_next(i)) 
		std::cout << i << ' ';
}

这样就可以遍历一个 bitset了

最后

bitset 与树分块结合可以解决一类求树上多条路径信息并的问题 然后还可以与莫队结合 等等........

完结撒花....(ohohohohohohoh)

 

 

 

还是老话  :

作者不易,,,ε=(´ο`*)))唉,,,

转载请附上链接Thanks♪(・ω・)ノ

posted @ 2020-10-13 22:33  *LZX*  阅读(395)  评论(0编辑  收藏  举报