通过解除引用迭代器将Vector写入文件

时间:2014-09-23 19:11:58

标签: c++ visual-c++ vector stl iterator

我通过迭代器将vector的内容写入文件作为fallows

for(vector<Student>::iterator itr=vec.begin();itr!=vec.end();itr++){
    out.write((char*)itr,sizeof *itr);
}

由于没有合适的转换函数,它会给出编译时错误。但是当我取消引用它并将其地址设置如下时

out.write( (char*)&(*itr),sizeof *itr);

工作正常。        那么为什么我不能直接使用itr呢?为什么我需要取消引用它并重新获取其地址?

1 个答案:

答案 0 :(得分:1)

你不能像这样逐字节地串行化复杂的对象,但你的尝试甚至都没有尝试过!

您的第一个示例尝试使用迭代器,将其强制转换为char*(完全没有意义),然后从该无意义的指针开始写入sizeof(Student)个字节值一个文件。

你的第二个例子绕过了有用的编译器错误,告诉你你的错误,强制演员。当然,你得到一个结果,但这完全是一个无意义的结果,你的程序甚至可能会崩溃。

首先,您应该尝试序列化Student对象,而不是指向它们的迭代器,其次,除非它们是非常简单的对象,并且您知道自己在做什么,否则&#39 ;仍然需要更多的智能序列化逻辑,而不仅仅是将其组件字节写入文件。了解对齐,填充,字节序,间接....