我想知道哪些是保存和加载C ++数据的最佳方法。 我最感兴趣的是保存我在模拟中使用的类和矩阵(不稀疏)。 现在我只是将它们保存为txt文件,但是如果我将一个成员添加到类中,那么我必须修改加载数据的函数(它必须解析并检查txt文件中的值), 我认为这并不理想。
一般情况下你会推荐什么? (p.s.因为我想发布我的代码我真的只想使用标准的c ++或可以重新分发的库)。
答案 0 :(得分:1)
在这种情况下,没有“最好的”。最适合你的是高度依赖你的情况。但是,让我们举一个例子让你思考你的细节以及这个兔子洞的深度。
如果您绝对肯定必须尽可能快地保存(而且您愿意付出代价),您可以定义自己的内存管理,将所有对象放入一个常见类型的连续数组中(例如整数) )。这允许您非常快速地将该数组作为二进制数据写入磁盘。您可能需要在模拟中使用此功能,该模拟有效地使用线程来加载每个核心/处理器以实时运行。
为什么这是一个相当可怕的解决方案?因为它需要大量工作并且以“优化”的名义为问题带来许多风险。
我做到了这一点。这是非常不愉快的。我毫不怀疑它仍有问题,我在这里只列出了一些。但是,它非常,非常快,非常非常非常有问题。
您必须根据自己的需要进行设计。通常,首要的需求是“让它工作”。不关心效率,只关心准确持续存在的事情,以及您在某些时候知道并可访问的信息。此外,您应该封装保存和加载的过程。然后,如果需要“让它更好”的步骤,你应该能够改变那一段代码,其余的应该工作。您甚至可以根据用户需求选择保存格式,而不是您必须为所有用户承担的需求。
鉴于列出的所有假设,利弊,您应该能够详细说明您对此问题的特殊需求。
答案 1 :(得分:0)
鉴于性能不是您的关注 - 这是答案的关键部分 - Boost序列化库是一个很好的答案。
评论中的链接指向文档。阅读教程(这对你最初想要的东西来说太过分了,但非常值得)。
最后,由于您主要使用数组矩阵,因此请尝试封装整个保存和加载过程,以便以后需要更改它时,您正在编写新的实现并在现有选择之间进行选择。我为了Boost Serialization的智能而花费了eddedmtime并不是很好;但是,您可能会发现未来的要求会将您转移到其他地方或多个地方。
答案 2 :(得分:0)
C++ Middleware Writer自动创建编组功能。将成员添加到类时,它会为您更新编组功能。