C++将类对象的向量的向量保存到文件中
C++ save vector of vector of vector of class object into file
我在c++中有一个类,如下所示:
class myCls
{
public:
myCls();
void setAngle(float angle);
void setArr(unsigned char arr[64]);
unsigned char arr[64];
double angle;
int index;
static float calcMean(const unsigned char arr[64]);
static float sqrt7(float x);
};
现在在我的主程序中,我有一个类的3D矢量:
vector<vector<vector< myCls > > > obj;
矢量的大小也会动态更改。我的问题是,如何将向量的内容存储到文件中,然后再检索?
我尝试了很多方法都没有成功。这是我的尝试:
std::ofstream outFile;
outFile.open(fileName, ios::out);
for(int i=0;i<obj.size();i++)
{
outFile.write((const char *)(obj.data()),sizeof(vector<vector<myCls> >)*obj.size());
}
outFile.close();
阅读它:
vector<vector<vector<myCls>>> myObj;
id(inFile.is_open())
{
inFile.read((char*)(myObj.data()),sizeof(vector<vector<myCls> >)*obj.size());
}
我得到的只是runTime错误。
有人能在这个问题上帮我吗?
如果您不太关心性能,请尝试boost::序列化。由于他们已经为stl容器实现了序列化函数,您只需要为myCL
编写序列化函数,其他一切都是免费的。由于您的成员变量都是公共的,因此您可以以侵入方式或非侵入方式进行操作。
在内部,vector
通常由两个数字组成,表示当前长度和分配的长度(容量),以及一个指向实际数据的指针。因此,"原始"对象的大小是固定的,大约是指针大小的三倍。这是您的代码当前所写的内容。指针指向的值不会被存储。当您读回内容时,您将指针设置为在大多数情况下甚至不会分配内存的内容,从而导致运行时错误。
通常,直接操作任何提供构造函数、析构函数或赋值运算符的类的内存都是一个非常糟糕的主意。向vector
的私有成员编写代码会彻底混淆内存管理,即使您也注意恢复指向的数据。出于这个原因,您应该只按照自己的方式编写简单(POD)数据。其他所有内容都应该进行自定义以使用自定义代码。
在向量的情况下,您可能会先存储长度,然后一次写入一个元素。对于读取,您可以读取长度,可能会相应地保留内存,然后一次读取一个元素。Voltron建议的boost::serialization
模板可能会省去实现所有这些的麻烦。
相关文章:
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 从函数角度看ID到文件路径的内部与外部映射
- 向量对到数组
- 如何将元素从向量转移到新数组?
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 如何将向量断言到特征矩阵
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 将数组/向量发送到 c++ 脚本的 cython 示例
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 访问向量并将数据导出到文件
- 将C++向量传递到文件编写器中
- 写入向量<向量<float>>到二进制文件
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 如何读写结构向量到文件
- 从坐标向量中提取坐标并保存到文件
- C++将类对象的向量的向量保存到文件中
- 将对象向量保存到C++中的文件中