O item 18 do livro de Scott Meyers STL eficaz: 50 maneiras específicas de melhorar seu uso da biblioteca de modelos padrão diz para evitar, vector <bool>
pois não é um contêiner STL e realmente não contém bool
s.
O seguinte código:
vector <bool> v;
bool *pb =&v[0];
não irá compilar, violando um requisito de contêineres STL.
Erro:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []
O tipo de retorno deveria ser T&
, mas por que é um caso especial vector<bool>
?
Em que vector<bool>
realmente consiste?
O item diz ainda:
deque<bool> v; // is a STL container and it really contains bools
Isso pode ser usado como uma alternativa para vector<bool>
?
Alguém pode explicar isso?
bool
, já que o elemento não tem seu próprio endereço.
std::vector<bool> v;
irá compilar. &v[0]
não (levando endereço de um temporário).
vector<bool>
tem uma má reputação, mas não totalmente justificável: isocpp.org/blog/2012/11/on-vectorbool