Feb 8, 2000
The Possible Deprecation of vector<bool> and Its Consequences
In the early days of STL, C++ creators decided to include a specialized form of the vector container class, namely vector < bool >. In this specialized vector, bits serve as the container's elements. This decision was plausible and seemed useful at that time. However, the experience gained in recent years shows that vector <bool> is problematic in many respects. Furthermore, it contradicts some of the basic requirements with which STL containers must comply. The problem is that vector <bool> elements are bits. Yet a bit is not an addressable typeyou can't define a pointer or a reference to a bit nor can you allocate single bits using operator new. Thus, algorithms and iterators can't cope with vector <bool> properly because they rely on references and pointers. Worse yet, on most implementations, vector <bool> is significantly slower than any other type of vector. The C++ standardization committee is now aware of these difficulties. Chances are good that future versions of the C++ Standard will deprecate vector <bool>. Therefore, it's advisable to avoid using vector <bool> altogether. If you need a vector of Boolean values, you can use vector <char> instead.