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::vector
que 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.