vector<bool>

vector< bool >は省メモリだけど遅い」と言われますが、どのぐらい遅いのか。検証します

検証条件

  • vector< bool >で宣言した配列と、bool[]で宣言した配列それぞれについて、以下のコードを実行する
// 10^8回の代入
for(int i=0; i<10000; i++) {
    for(int j=0; j<10000; j++) {
        v[j] = (i%2);
    }
}
  • 開始から終了までにかかった時間と、使用メモリ量を計測
    • 時間はclock()を使ってμs単位で計測(読みづらかったのでmsに換算)
    • 使用メモリ量はsizeof(v)を使用
    • 生成にかかる時間は対象外

検証結果

メモリ使用量[byte] 実行速度[ms](100回計測した平均値)
vector< bool > 24(※1) 1703.82
bool[] 10000 494.2

めっちゃ遅い(3.45倍ぐらい)

(※1 : vector< bool >をsizeof()すると実際のデータ格納領域は含まれないらしい
ただ、vector< bool >は1ビット単位で管理してると聞いた覚えもあるので、単純に考えると1/8ぐらいになってるのかも…?)

せっかくなので他にも検証

メモリ使用量[byte] 実行速度[ms](100回計測した平均値)
vector< bool > 24(※1) 1703.82
bool[] 10000 494.20
vector< bool >(iteratorでループ) 24(※1) 2729.79
bitset 1256 1424.48

結論:vector< bool >は遅い(確信)

ちなみにここまで遅いのはboolのときだけです。intとかなら結構マシ