日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

bitset

發布時間:2024/9/5 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 bitset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

bitset

1 簡介

作為一個專門存儲二進制的容器,bitset 的每一個位置只能用來存儲 (0,1) ,并且每一位只占一個 bit ,也就是說,每 (8) 位占一個字節,相比之下 bool 型一位 (1) 個字節,int 型一位 (4) 個字節。

2 聲明

用 bitset 需要使用與其同名的頭文件,同時我們可以用 string 類型來初始化 bitset ,像這樣:

bitset<N> k(string("00010010"));

注意,在 bitset 中,最右邊為第 (0)? 位,以及 (N)? 為 bitset 的長度,也就是說,最高到 (N-1)? 位。

我們同樣可以通過整型來賦值 bitset ,像這樣:bitset<N> s(n) 。特別地,如果 (n) 的二進制位數超過 (N) ,我們就只取 (n) 后 (N) 位,即 (0) 到 (N-1) 位。

3 運算

bitset 支持左移,右移,以及所有的位運算:^,&,| ,不過,如果計算機字長為 (w)?? ,那么這些操作的時間復雜度都是 (O(frac{N}{w}))?? 。實際上 bitset 絕大部分的復雜度都為 (O(frac N w))? ,而 (w) 一般為 (32) 。

同時 bitset 支持單點修改,直接用 [] 改某一位就可以。用 [] 也可以訪問任意位置元素。

需要注意的是,左移并不會改變 bitset 的位數,也就是說,超過了最高位就不存儲,低位補 (0)。

4 輸入輸出

我們直接使用 cin cout 就可以。

同時 bitset 可以轉化成 string 類型和 unsigned int 類型,如果 bitset 大小大于 32 位,那么就會 RE 。

使用的函數是 to_string to_ulong ,代碼:

s.reset();
s[2] = true;
unsigned int s1 = s.to_ulong();
std::cout << s1 << std::endl;                   //4
unsigned long long int s2 = s.to_ullong();      //C++11
std::cout << s2 << std::endl;                   //4
std::string ss = s.to_string();                 
std::cout << ss << std::endl;                   //00000100

5 常用成員函數

5.1 清空操作

s.reset() 將集合內所有元素清 (0)

5.2 賦值為 (1)

s.set() 在無參數時可以把所有位置賦值為 (1) 。

如果有參數,則參數形為 (int posi,bool val) 表示把第 (posi) 賦值為 (val) ,其余為 (1) 。

5.3 返回某一位值

s.test(int posi) 返回第 (posi) 位的值。

5.4 是否有一位為 (1)

s.any() 返回一個 bool 值,如果這個 bitset 中有一位為 (1) ,那么返回 (1) 否則返回 (0) 。

5.5 是否每一位都為 (0)

s.none() 返回一個 bool 值,看 bitset 中是否每一位都為 (0) ,是則返回 (1) 否則返回 (0) 。

5.6 數 (1) 的個數

s.count() 返回一個 bitset 中 (1) 的個數。是一個無符號整型。

5.7 取反

函數 s.flip() 可以將集合內所有蘇取反,如果引用參數 s.flip(int posi) ,那么就將第 (posi) 位取反。

總結

以上是生活随笔為你收集整理的bitset的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。