1. 程式人生 > >Effective_STL 學習筆記(十八) 避免使用 vector<bool>

Effective_STL 學習筆記(十八) 避免使用 vector<bool>

 

作為一個 STL 容器,vector<bool> 確實只有兩個問題:

  1. 它不是一個STL容器

  2. 它並不容納 bool

一個東西不能成為STL容器只因為會有人說它是(哈哈哈哈哈哈)

vector不能編譯下式:

1   vector<bool> v;
2   bool *pb = &v[0];  // 使用 vector<bool>::operator[] 返回的東西的地址初始化一個bool*

因為vector<bool> 打包 bool 以節省空間,每個儲存在“vector”中的“bool”佔用一個單獨的bit,而禁止有指向單個位元的指標

 

標準庫提供了兩個替代品,它們滿足幾乎所有的需求:

1. 第一個是deque<bool>

  deque提供了幾乎多有vector所提供的,而且deque<bool> 儲存真正的bool值

2. bitset。

  bitset 不是STL容器,是C++標準庫的一部分,大小在編譯期固定,因此不支援插入和刪除元素,不是迭代器,不支援iterator。壓縮表示,每個值只佔用一位元。提供vector<bool> 特有的 flip 成員函式,還有一些列其他操作位集所特有的成員函式。如果不在意沒有迭代器和動態改變大小,bitset正合適。