没看懂Effective STL关于vector的说明解决办法
没看懂Effective STL关于vector<bool>的说明
书上说: 因为vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。 vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。在一个典型的实现中,每个保存在“vector”中的“bool”占用一个单独的比特,而一个8比特的字节将容纳8个“bool”。在内部,vector<bool>使用了与位域(bitfield)等价的思想来表示它假装容纳的bool。
我写了几行代码来测试一下,发现有问题。既然vector<bool>就是存储的位域,那么至少我可以获得一个字节的内容吧。但是下面的代码在VC10下面崩溃了。为什么呢?
------解决方案--------------------
改成这样:
书上说: 因为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; }
------解决方案--------------------