天天看點

把《c++ primer》讀薄(3-3 标準庫bitset類型)

督促讀書,總結精華,提煉筆記,抛磚引玉,有不合适的地方,歡迎留言指正。

問題1、标準庫bitset類型(模版)

需要處理二進制位的時候,可以使用c++标準庫提供的bitset類型,它也是類模版,類似vectro容器,唯一不同的是,bitset類型需要說明長度,使用常量表達式給出的整型字面值或者已經初始化的cosnt對象。

使用無符号的值初始化bitset對象,該值被初始化為二進制序列,如果無符号值長度小于bitset對象,那麼就把高階位截掉

問題2、使用string對象初始化bitset對象需要注意的問題

使用string對象初始化bitset對象的時候,直接初始化為二進制序列,從string字元串對象的右邊開始讀取!!

把《c++ primer》讀薄(3-3 标準庫bitset類型)
把《c++ primer》讀薄(3-3 标準庫bitset類型)

問題3、bitset對象的常見操作

把《c++ primer》讀薄(3-3 标準庫bitset類型)
把《c++ primer》讀薄(3-3 标準庫bitset類型)

測出b對象裡的1的個數

注意,count函數傳回的值是size_t類型,定義在頭檔案cstddef中,c裡是stddef.h,size_t是一個無符号的和機器無關的整型。類似無符号int類型

下面這樣雖然不報錯,但是以前說過類似的問題,不建議使用,這裡就看成是錯的

類似容器vector或者string類型,bitset也有求長度的函數size()

//通路bitset對象裡的位,大同小異,類似其他容器或者标準庫,數組的下标操作

把《c++ primer》讀薄(3-3 标準庫bitset類型)
把《c++ primer》讀薄(3-3 标準庫bitset類型)

//測試bitset對象某一位是不是1

//或者直接使用下标操作的傳回值

//把所有二進制位數都設定為1

//隻是把第1位設定為1

//把所有二進制位都設定為0

//同樣,隻是設定某位為0

//取反操作

//同樣,類似操作,隻對某一位取反

//當且僅當,bitset對象的長度小于或者等于無符号long整型的變量時,可以使用如下函數

問題4、一定注意,bitset對象的下标問題,是從右邊開始的!

把《c++ primer》讀薄(3-3 标準庫bitset類型)

一定注意,下标從右邊開始是0-31,不是傳統的左邊開始了

把《c++ primer》讀薄(3-3 标準庫bitset類型)

從右邊開始0-15為1,其餘高位0填充。

問題5、如題,bitset<32> bit(1010101),初始化bit的結果是什麼?

千萬不要想當然的認為,這是寫1010101就是二進制,其實預設的是十進制形式

小結:

c++标準庫定義的數組和指針等屬于低級的抽象資料類型,而标準庫的容器比如vector,還有标準庫bitset類模版,string類型等,都是進階的抽象資料類型!其中,string類型提供了變長的字元串存儲操作,vector容器提供了對某總類型的對象的存儲操作。

還有學到的疊代器,提供了間接通路容器内對象的方法(可以代替下标)。比如通路和周遊vector容器内對象或者string類型的元素。

記住,優秀的c++程式員,應該習慣使用進階抽象資料類型,盡量避免使用低級的數組還有指針。除非是強調程式運作的速度的子產品,那樣就應該使用低級的複合資料類型,指針或者數組。

辛苦的勞動,轉載請注明出處,謝謝……

http://www.cnblogs.com/kubixuesheng/p/4145203.html

繼續閱讀