std :: vector nem sempre é o que parece

Anúncio de serviço público para todos vocês, jovens e ingênuos programadores de C ++ por aí, como eu! Seu fiel std::vector<...>nem sempre é o que parece! std::vector<bool>é uma mentira. Não use a menos que seu C ++ – fu seja grande o suficiente para que você já soubesse do que eu estava falando antes de começar a ler este post, caso em que você já sabe o suficiente para não usá-lo.

Passei algumas horas esta manhã batendo minha cabeça fora da minha mesa por causa do comportamento aparentemente erradico e inexplicável deste contêiner não conforme . Se eu tivesse percebido que std::vector<bool>na verdade é sua própria especialização em std::vector! É uma versão micro-otimizada std::vectorque quebra alguns dos comportamentos esperados. Ele joga fora a garantia de memória contínua . Se você não acredita em mim, pergunte a Herb Sutter . Veja também Alternativa para o vetor <bool> em StackOverflow.

Cuidado std::vector<bool>! E espero que, ao contrário de mim, você descubra antes de bater com a cabeça na mesa.