STL

《Effective STL》

18《避免使用vector

Posted by Liangjf on April 9, 2019

条目十八《避免使用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字节。。。