bitset 一個卡常必備神器

std::bitset 是標準庫中的一個存儲 0/1 的大小不可變容器。嚴格來說,它並不屬於 STL——————————————源自於oi-wiki的介紹。ios

簡單來講bitset就是一種相似於數組的結構(只能存1 or 0)且能夠優化內存空間,一個元素只佔1bit   所以計算一些信息時,所需時間也是其1/32.c++

複雜度:通常記做O(n/32) 但這不太嚴謹   還有的記做O(n/w)其中w=32(計算機的位數),這種記法較爲廣泛接受。數組

食用方法:函數

1.先開個頭文件: 優化

#include <bitset>

2.指定大小:spa

bitset<1000> bz;// 下面的都是用這個bz來解釋。

3.定義與初始化code

bitset類型能夠用string和整數初始化(整數轉化成對應的二進制)blog

#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.基本運算ip

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♪(・ω・)ノ

相關文章
相關標籤/搜索