В пункте 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>
?
Может кто-нибудь объяснить это?