В пункте 18 книги Скотта Мейерса "Эффективный STL: 50 конкретных способов улучшить использование стандартной библиотеки шаблонов" говорится, что следует избегать vector <bool>, поскольку он не является контейнером STL и на самом деле он не содержит bool s.
Следующий код:
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>?
Может кто-нибудь объяснить это?