¿Por qué vector <bool> no es un contenedor STL?
Artículo 18 del libro de Scott Meyers.STL efectivo: 50 maneras específicas de mejorar su uso de la biblioteca de plantillas estándar dice que evitarvector <bool>
ya que no es un contenedor de STL y realmente no contiene bools.
El siguiente código:
vector <bool> v;
bool *pb =&v[0];
no compilará, violando el requisito de los contenedores STL.
Error:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []
se supone que el tipo de retorno es T &, pero ¿por qué es un caso especial paravector<bool>
?
Que hacevector<bool>
realmente consiste en?
El artículo dice además:
deque<bool> v; // is a STL container and it really contains bools
¿Se puede utilizar esto como una alternativa avector<bool>
?
¿Alguien puede explicar esto?