部落格20 避免使用vector bool

2021-09-19 09:11:56 字數 642 閱讀 7312

內容:記錄下今天覆習下以前看過的effective stl中的第18條建議,不要使用vector。

因為它其實並不儲存bool。而且它不屬於容器,乙個物件是不是容器,並不是你能用容器語法定義出來的就一定是容器,書中講到c++標準規定乙個stl容器需要滿足的其中乙個條件就是:如果c是包含物件t的乙個容器,那麼t*p=&c[0]這個要成立。但是對bool型別其實不成立。

結果:可以看到對int等常見型別可以成立,但是對bool型別卻不成立。

分析:vector其實它並不是真的儲存bool,而是為了節省空間,它使用了bool的緊湊表示,用乙個位元組來儲存8個bool。這個其實就類似於我們學習過的使用點陣圖來節省空間的技術一樣。因此指向單個位的引用是被禁止的。vector::operator沒有辦法返回乙個指向乙個單位的引用,所以**中的轉換不成立。

建議:但是如果你真的需要乙個儲存bool型別的容器,你可以使用deque,它確實儲存bool,還有乙個選擇就是bitset,這個是比較理想的做法,也就是點陣圖了。不過呢,它的大小確是編譯時確定,不允許修改,因為它不是stl容器,所以也不支援迭代器。

避免使用vector bool

作為乙個stl容器,vector僅僅有兩點不正確。首先。它不是乙個stl容器。其次,它並不儲存bool。除此之外。一切正常。乙個物件要成為容器,就必須滿足c 標準中列出的全部條件。當中乙個條件是,假設c是包括物件t的容器,並且c支援operator,那麼以下的 必須可以被編譯 t p c 0 換句話...

10 避免使用with

程式經常需要對單個物件依次呼叫一系列方法。function status info 複製 function f x,y 複製 變數作用域和物件命名空間之間的衝突使得with 塊異常脆弱。error status connecting status connecting widget.prototyp...

有效避免使用遞迴

例項 自動化指令碼管理工具,資料儲存在伺服器,讀到客戶端後,需要建立乙個資料結構,從上到下順序為 folder object control operation parameter folder object operation parameter folder case caseprocess p...