我有一段代码会产生运行时错误。任何人都可以帮忙找出原因吗?
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)。
答案 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>
。