我有很多以这种方式存储的数据(7k行):
#include <vector>
#include <deque>
std::deque<std::deque<std::vector<unsigned char>>> data =
{
{{0}},
{{1,0},
{0,1}},
{{1,1,0,0},
{0,1,1,0},
{1,0,0,1},
{0,1,0,1},
{0,0,1,1}},
{{1,1,1,0,0,0},
{0,1,1,1,0,0},
{1,0,1,0,1,0},
{0,1,1,0,1,0},
...
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}}
};
这使我的代码运行得更快,因为我可以跳过一些部分。向量的长度不需要是可变的,但这只是一种简单的方法。 问题是它现在需要几分钟而不是几秒钟来编译。
有更好的方法来存储这些数据吗?还是应该在运行时加载?
如果在运行时加载,那么它不会花费时间吗?
答案 0 :(得分:4)
查看您的编译器是否支持预编译的头,如果是,请将此数据作为该PCH的一部分。这将导致仅在数据实际更改时发生的缓慢工作,并将其与所有其他代码更改分开。
如果出于某种原因PCH不是一个选项,您还可以创建一个标题,extern
是您的std::vector
,并且只有一个.cpp文件包含您的~7k行元素。如果文件未经修改,大多数编译器都不会重新编译单个单元。
答案 1 :(得分:2)
你应该从思考你想要实现的目标开始。您是否担心您的程序会让用户感到迟钝?
从硬盘驱动器加载7kB数据将比任何人都能注意到的更快。我的猜测是几乎任何目的都可以。 如果数据可以编译,它必须是常量,这意味着它只需要加载一次。即使是具有硬截止期限的安全关键系统,在程序初始化期间通常也能提供几毫秒的时间。
在不太可能的情况下,这甚至很重要,你应该测量时间 它需要加载数据,看看它是否可以接受。