存储数据结构c ++

时间:2015-11-10 08:49:51

标签: c++ data-structures

我有很多以这种方式存储的数据(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}}
};

这使我的代码运行得更快,因为我可以跳过一些部分。向量的长度不需要是可变的,但这只是一种简单的方法。 问题是它现在需要几分钟而不是几秒钟来编译。

有更好的方法来存储这些数据吗?还是应该在运行时加载?

如果在运行时加载,那么它不会花费时间吗?

2 个答案:

答案 0 :(得分:4)

查看您的编译器是否支持预编译的头,如果是,请将此数据作为该PCH的一部分。这将导致仅在数据实际更改时发生的缓慢工作,并将其与所有其他代码更改分开。

如果出于某种原因PCH不是一个选项,您还可以创建一个标题,extern是您的std::vector,并且只有一个.cpp文件包含您的~7k行元素。如果文件未经修改,大多数编译器都不会重新编译单个单元。

答案 1 :(得分:2)

你应该从思考你想要实现的目标开始。您是否担心您的程序会让用户感到迟钝?

从硬盘驱动器加载7kB数据将比任何人都能注意到的更快。我的猜测是几乎任何目的都可以。 如果数据可以编译,它必须是常量,这意味着它只需要加载一次。即使是具有硬截止期限的安全关键系统,在程序初始化期间通常也能提供几毫秒的时间。

在不太可能的情况下,这甚至很重要,你应该测量时间 它需要加载数据,看看它是否可以接受。

相关问题