【博客20】避免使用vector

内容: 记录下今天复习下以前看过的effective STL中的第18条建议,不要使用vector。
因为它其实并不储存bool。而且它不属于容器,一个对象是不是容器,并不是你能用容器语法定义出来的就一定是容器,书中讲到c++标准规定一个STL容器需要满足的其中一个条件就是:如果c是包含对象T的一个容器,那么T*p=&c[0]这个要成立。但是对bool类型其实不成立。

代码:
在这里插入图片描述
结果:可以看到对int等常见类型可以成立,但是对bool类型却不成立。

分析:vector其实它并不是真的储存bool,而是为了节省空间,它使用了bool的紧凑表示,用一个字节来储存8个bool。这个其实就类似于我们学习过的使用位图来节省空间的技术一样。因此指向单个位的引用是被禁止的。vector::operator[]没有办法返回一个指向一个单位的引用,所以代码中的转换不成立。

建议: 但是如果你真的需要一个储存bool类型的容器,你可以使用deque,它确实储存bool,还有一个选择就是bitset,这个是比较理想的做法,也就是位图了。不过呢,它的大小确是编译时确定,不允许修改,因为它不是STL容器,所以也不支持迭代器。

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/89421802