vector<bool>不是STL容器,它并不存储bool。
vector<bool> v;
bool *pb = &v[0];
上面代码不能编译,vecor<bool>是一个假的容器,存储的不是bool,而是一个二进制位。
原因再介绍下,vector<bool>::operator[]返回一个对象,这个对象指向单个位的引用,即所谓的代理对象。vector<bool>看起来像这样:
template<typename Allocator>
vector<bool, Allocator> {
pubilc:
class reference {...};
reference operator[](size_type n);
...
};
再看之前代码编译不能通过,原因是&v[0]的类型是reference*类型不是bool*类型。
那为什么还会出现vector<bool>呢?说是做了实验,想要通过代理来存取其元素,最后实验失败了...
那么替代vector<bool>的方案有什么?
1 deque<bool>
是一个STL容器,存储的是bool。注意,内存不是连续的,所以不能把deque<bool>的数据传递给C API。
2 bitset