首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

没看懂Effective STL关于vector<bool>的说明解决办法

2012-04-24 
没看懂Effective STL关于vectorbool的说明书上说: 因为vectorbool是一个伪容器,并不保存真正的bool,而

没看懂Effective STL关于vector<bool>的说明
书上说: 因为vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。 vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。在一个典型的实现中,每个保存在“vector”中的“bool”占用一个单独的比特,而一个8比特的字节将容纳8个“bool”。在内部,vector<bool>使用了与位域(bitfield)等价的思想来表示它假装容纳的bool。

我写了几行代码来测试一下,发现有问题。既然vector<bool>就是存储的位域,那么至少我可以获得一个字节的内容吧。但是下面的代码在VC10下面崩溃了。为什么呢?

C/C++ code
#include<iostream>#include<vector>using namespace std;int main(void){    vector<bool> vb;    vb[0]=1;    vb[1]=2;    cout<<*(bool*)(&vb)<<endl;    return 0;}


[解决办法]
改成这样:
C/C++ code
#include<iostream>#include<vector>using namespace std;int main(void){    vector<bool> vb(1024);// SIZE    vb[0]=1;    vb[1]=2;// bool(2)==1.    cout<<*(bool*)(&vb[0])<<endl;    return 0;}
[解决办法]
探讨

引用:

楼上那代码结果是1吧,你的是128?
vb(1024) 这样是预先申请了空间,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据 引用:
引用:

改成这样:
C/C++ code

#include<iostream>
#include<vector>
using namespace std;
……

热点排行