bitset大概就是相似於bool數組同樣的東西html
可是它的每一個位置只佔1bit(特別特別小)ios
bitset的原理大概是將不少數壓成一個,從而節省空間和時間(暴力出奇跡)算法
通常來講bitset會讓你的算法複雜度 $/32$(具體是什麼要看計算機)數組
使用bitset類型需$#include<bitset>$函數
bitset類型在定義時就須要指定所佔的空間,例如優化
bitset<233>bit;
bitset類型能夠用string和整數初始化(整數轉化成對應的二進制)spa
#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; }
輸出結果code
00000000000000011101001 00000000000000011101001
bitset支持全部位運算htm
bitset<23>bita(string("11101001")); bitset<23>bitb(string("11101000")); cout<<(bita^bitb)<<endl; //輸出00000000000000000000001
bitset<23>bita(string("11101001")); bitset<23>bitb(string("11101000")); cout<<(bita|bitb)<<endl; //輸出00000000000000011101001
bitset<23>bita(string("11101001")); bitset<23>bitb(string("11101000")); cout<<(bita&bitb)<<endl; //輸出00000000000000011101000
bitset<23>bit(string("11101001")); cout<<(bit<<5)<<endl; //輸出00000000001110100100000
bitset<23>bit(string("11101001")); cout<<(bit>>5)<<endl; //輸出00000000000000000000111
對於一個叫作bit的bitset: bit.size() 返回大小(位數) bit.count() 返回1的個數 bit.any() 返回是否有1 bit.none() 返回是否沒有1 bit.set() 全都變成1 bit.set(p) 將第p + 1位變成1(bitset是從第0位開始的!) bit.set(p, x) 將第p + 1位變成x bit.reset() 全都變成0 bit.reset(p) 將第p + 1位變成0 bit.flip() 全都取反 bit.flip(p) 將第p + 1位取反 bit.to_ulong() 返回它轉換爲unsigned long的結果,若是超出範圍則報錯 bit.to_ullong() 返回它轉換爲unsigned long long的結果,若是超出範圍則報錯 bit.to_string() 返回它轉換爲string的結果
這玩意兒其實挺實用的,blog
通常用來優化奇偶性有關的問題,或者判斷聯通性之類的,(或許還能夠在搜索的時候優化一下訪問標記?)
快省選了,能夠本身仍是什麼都不會,估計這兩天學新算法也沒啥意義了,就整理整理語法吧QWQ..