不使用vector的原因和替代方法

vector<bool>不是容器,至少,不是標準意義上的容器。

vector<bool>的名稱有點讓人誤解,因爲其內部元素實際上並不是標準的bool值,標準的bool值至少與char擁有一樣的大小,從而可以被“正常”使用。

然而C++標準對於vector<bool>值有其特殊的實現方法。目的是爲了減小空間的耗用。特殊版本內部只使用一個bit來存儲一個元素,所以通常要比一般的bool值小8倍之多。


但是這裏就帶來了一個小麻煩,C++的最小可尋址值通常以byte爲單位,所以上述的vector<bool>特殊版本的references和iterators經過了特殊的處理,並不是bool值的實際地址,而是一個“代理對象”。這樣,對於一般類可以使用的以下操作:

T* p = &v.front
對於vector<bool>值來說,並不適用。

除此之外,由於vector<bool>通過代理對象進行存取訪問時需要執行逐位處理,訪問速度通常比int之類的普通類型操作要慢很多。
 
因此,對vecotr<bool>的使用需慎重考慮以下幾點:
(1)是否需要犧牲速度來獲取空間上的優化
(2)算法中會否有對vecotr地址進行解引用操作的可能。
 
如果不滿足以上條件,建議使用deque<bool>來取代vector<bool>,功能基本相同,但deque<bool>未對其進行特殊處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章