bitset用法小結

2022-04-30 14:51:10 字數 2209 閱讀 7734

bitset大概就是類似於bool陣列一樣的東西

但是它的每個位置只佔1bit(特別特別小)

bitset的原理大概是將很多數壓成乙個,從而節省空間和時間(暴力出奇蹟)

一般來說bitset會讓你的演算法複雜度 $/32$(具體是什麼要看計算機)

使用bitset型別需$#include$

bitset型別在定義時就需要指定所佔的空間,例如

bitset<233>bit;

bitset型別可以用string和整數初始化(整數轉化成對應的二進位制)

#include#include

#include

using

namespace

std;

intmain()

輸出結果

00000000000000011101001

00000000000000011101001

bitset支援所有位運算

bitset<23>bita(string("

11101001

"));

bitset

<23>bitb(string("

11101000

"));

cout

<<(bita^bitb)

bitset<23>bita(string("

11101001

"));

bitset

<23>bitb(string("

11101000

"));

cout

<<(bita|bitb)

bitset<23>bita(string("

11101001

"));

bitset

<23>bitb(string("

11101000

"));

cout

<<(bita&bitb)

bitset<23>bit(string("

11101001

"));

cout

<<(bit<<5)

bitset<23>bit(string("

11101001

"));

cout

<<(bit>>5)

對於乙個叫做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的結果

這玩意兒其實挺實用的,

一般用來優化奇偶性有關的問題,或者判斷聯通性之類的,(或許還可以在搜尋的時候優化一下訪問標記?)

bzoj3687

bzoj4484

快省選了,可以自己還是什麼都不會,估計這兩天學新演算法也沒啥意義了,就整理整理語法吧qwq..

bitset用法小結

b.any b中是否存在置為1的二進位制位?b.none b中不存在置為1的二進位制位嗎?b.count b中置為1的二進位制位的個數 b.size b中二進位制位的個數 b pos 訪問b中在pos處的二進位制位 b.test pos b中在pos處的二進位制位是否為1?b.set 把b中所有二進...

bitset 用法整理

建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...

bitset用法整理

bitset用法整理 2008 01 17 14 15 建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5...