条目十八《避免使用vector》
先说结论:
- 一是:
vector<bool>
不是标准容器,因为标准容器的对于T *p = &c[0];
必须是可编译的。 - 二是:
vector<bool>
并不是以单个元素为bool
来存储的。
在底层实现中,vector<bool>
中为了节省空间,bool
并不真的是以单个字节来存储的,而是通过位bit
来表示的,一个位代表一个bool
表示。
vector
不满足STL容器的必要条件,你最好不要使用它;而deque 和bitset是基本能满足你对 vector 提供的性能的需要的替代数据结构
这里我不想深究了,因为它是不提倡的技术。其主要原因就是vector不是标准容器,不符合T *p = &c[0];
,返回的是一个引用代理,究其原因就是底层内部是使用了压缩位数来表达bool,借助引用来模拟返回的是一个bool字节。。。