Почему вектор <bool> не является контейнером STL?
Пункт 18 книги Скотта МейерсаЭффективный STL: 50 конкретных способов улучшить использование стандартной библиотеки шаблонов говорит, чтобы избежатьvector <bool>
поскольку это не контейнер STL, и он не содержит bools.
Следующий код:
vector <bool> v;
bool *pb =&v[0];
не будет компилироваться, нарушая требования контейнеров STL.
Ошибка:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []
тип возвращаемого значения должен быть T &, но почему это особый случай дляvector<bool>
?
Что значитvector<bool>
действительно состоит из?
Пункт далее говорит:
deque<bool> v; // is a STL container and it really contains bools
Может ли это быть использовано в качестве альтернативыvector<bool>
?
Может кто-нибудь, пожалуйста, объясните это?