18項 vector<bool>は使わないようにしよう

vector<bool>は使わないようにしよう



vector<bool>はboolの一つに1bitの領域を割り当てるという実装になっています。
vector<bool>の要素へのポインタを取得しようとすると、vector<bool>::reference*が返ります。
なので、下のコードはコンパイルできません。

vector<bool> v;
...
bool *pb = &v[0]; //vector<bool>::reference*が返る

vector<bool>::reference*が用意されているのは、処理系依存のboolのサイズと1bitのvector<bool>が違っているからです。



代わりに、deque<bool>かbitsetを使います。deque<bool>の各要素は、処理系依存のboolのサイズと同じになります。