我写了几行代码来测试一下,发现有问题。既然vector<bool>就是存储的位域,那么至少我可以获得一个字节的内容吧。但是下面的代码在VC10下面崩溃了。为什么呢?
#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;
}
11 个解决方案
#1
vb[0]=1;
vb[1]=2;
换成
vb.push_back(1);
你那样越界
vb[1]=2;
换成
vb.push_back(1);
你那样越界
#2
vb[0]=1;
vb[1]=2;
换成
vb.push_back
你那样越界
vb[1]=2;
换成
vb.push_back
你那样越界
#3
楼主你现在的vb里面空空如也的,直接用[]操作肯定越界了,像楼上说的,用push_back插入进去吧
#4
没有直接用【】会插入吧
#5
map是这样的,但是vector不是
#6
#7
改成这样:
#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;
}
#8
改成了你这样以后,打印的结果是128.
这个128是怎么来的呢?
我debug看vb的内容是true,true,false,false.....false,前两个字节是1.
那么转成bool类型(char)就是0b11000000应该是192才对啊,为什么是128?
还有就是,vb的构造函数如果没有指定大小就会程序崩溃? 指定了大小就可以运行的?
谢谢!
#9
楼上那代码结果是1吧,你的是128?
vb(1024) 这样是预先申请了空间,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
vb(1024) 这样是预先申请了空间,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
#10
我在vc2010下面又测试了一下,这次不是128,也不是1,
而是直接崩溃了。
为什么呢?
#11
7楼的代码是错的.
vb[0] 其实是一个引用代理类对象,不是一个bool 类型的对象....不解释,自己看书.以后你就懂了...
你直接cout<<vb[0]; 就可以了.
#1
vb[0]=1;
vb[1]=2;
换成
vb.push_back(1);
你那样越界
vb[1]=2;
换成
vb.push_back(1);
你那样越界
#2
vb[0]=1;
vb[1]=2;
换成
vb.push_back
你那样越界
vb[1]=2;
换成
vb.push_back
你那样越界
#3
楼主你现在的vb里面空空如也的,直接用[]操作肯定越界了,像楼上说的,用push_back插入进去吧
#4
没有直接用【】会插入吧
#5
map是这样的,但是vector不是
#6
#7
改成这样:
#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;
}
#8
改成了你这样以后,打印的结果是128.
这个128是怎么来的呢?
我debug看vb的内容是true,true,false,false.....false,前两个字节是1.
那么转成bool类型(char)就是0b11000000应该是192才对啊,为什么是128?
还有就是,vb的构造函数如果没有指定大小就会程序崩溃? 指定了大小就可以运行的?
谢谢!
#9
楼上那代码结果是1吧,你的是128?
vb(1024) 这样是预先申请了空间,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
vb(1024) 这样是预先申请了空间,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
#10
我在vc2010下面又测试了一下,这次不是128,也不是1,
而是直接崩溃了。
为什么呢?
#11
7楼的代码是错的.
vb[0] 其实是一个引用代理类对象,不是一个bool 类型的对象....不解释,自己看书.以后你就懂了...
你直接cout<<vb[0]; 就可以了.