Punkt 18 książki Scotta Meyersa Efektywny STL: 50 konkretnych sposobów na poprawę korzystania ze standardowej biblioteki szablonów mówi, aby tego unikać, vector <bool>
ponieważ nie jest to kontener STL i tak naprawdę nie zawiera bool
s.
Poniższy kod:
vector <bool> v;
bool *pb =&v[0];
nie skompiluje się, naruszając wymóg kontenerów STL.
Błąd:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []
zwracany typ ma być T&
, ale dlaczego jest to specjalny przypadek vector<bool>
?
Z czego tak vector<bool>
naprawdę składa się?
Przedmiot dalej mówi:
deque<bool> v; // is a STL container and it really contains bools
Czy można to wykorzystać jako alternatywę dla vector<bool>
?
Czy ktoś może to wyjaśnić?