通过取消引用迭代器将Vector写入文件
Writing Vector to file by dereferencing iterator
我正在通过迭代器将向量的内容写入一个文件中,作为空闲
for(vector<Student>::iterator itr=vec.begin();itr!=vec.end();itr++){
out.write((char*)itr,sizeof *itr);
}
由于不存在合适的转换函数,它给出了编译时错误。但当我取消引用itr并将其地址记为以下时
out.write( (char*)&(*itr),sizeof *itr);
它运行良好。为什么我不能直接使用itr?为什么我需要取消引用它并重新获取它的地址?
您不能像这样逐个字节地串行化复杂对象,但您的尝试甚至没有尝试做到这一点!
您的第一个示例尝试使用迭代器,将其强制转换为char*
(这是完全无意义的),然后将从该无意义指针开始的相当于sizeof(Student)
的字节写入文件。
第二个例子绕过了告诉您错误的有用编译器错误,强制强制执行强制转换。当然,你会得到一个结果,但这完全是一个胡说八道的结果,你的程序甚至可能崩溃。
首先,您应该尝试序列化Student
对象,而不是指向它们的迭代器。其次,除非它们是非常简单的对象,并且您知道自己在做什么,否则您仍然需要比将其组件字节写入文件更智能的序列化逻辑。了解对齐、填充、端序、间接。。。。
相关文章:
- 在C++中将类(带有Vector成员)保存为二进制文件
- 使用 boost zlib 从 std::vector 中的文件中读取压缩的 zraw 数据
- 如何在文件中节省空间地存储和检索 std::vector<int> 值
- 如何在多个文件中声明全局 std::vector 2d 数组?C++
- 无法将二进制文件读取到 std::vector<std::byte> 中C++
- 如何在 c++ 中将二进制文件加载/读取到"vector<vector< bitset<32> >"中?
- 尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
- C++ vector<pair<int,int>> std::all_of() 函数问题(重定向到头文件)
- 使用 boost 将二进制文件读入 std::vector
- 检查一系列单词,形成一个文本文件,保存在字符串vector C 中
- 使用 std::find 查找从二进制文件中读取的字符并转换为 std::vector 中的 std::string<string> 会产生这种不可预测的行为?
- 从C++文件中读取包含 std::vector 的对象
- 在头文件中包含std::vector会导致模板实例化错误
- CGAL 如何将 std::vector<Point> 点保存到 .xyz 文件中?
- 将二进制文件读取到 std::vector<bool>
- 如何从文件中"2 dimentional vector"行 X 个单词?
- 将结构从文件写入/读取到 std::vector<>
- 将数据保存在std :: vector或.txt文件中的速度更快
- 锁定'vector'文件中的错误
- g++:找不到'vector'文件