写布尔值到档案

时间:2010-06-09 09:51:43

标签: c++ file boolean

我有一段代码会产生运行时错误。任何人都可以帮忙找出原因吗?

vector<int> intData;
vector<bool> boolData;


for(int i=0;i<19000;i++)
   boolData.push_back(false);


string ofile = "tree.dat";
ofstream fout(ofile.c_str(),ios::out | ios::binary);


if (!boolData.empty()) fout.write((char *)&boolData[0], sizeof(bool)*boolData.size());
fout.close();

它在尝试写入文件时给出错误(fout.write)。

2 个答案:

答案 0 :(得分:4)

您无法获取vector <bool>成员的地址。这是因为vector <bool>是std :: vector的专用版本,存储在这样的向量中的东西实际上不是bool,而是单个位,它们是不可寻址的。如果您需要获取地址,请改用vector <char>deque<bool>。如果你还需要存储是连续的(如果你想使用write(),那么你可以使用{(1}})。

答案 1 :(得分:3)

vector<bool>特别适用于标准(23.2.5,lib.vector.bool)。

它中的元素被打包成位而不是字节,这意味着你不能获取单个元素的地址。

您可以更改实现以编写向量使用的基础分配,但使用vector<char>来存储您的布尔值则更为直接。

我建议您使用vector<char>