【问题标题】:Compilation time for initialized vector of vectors of strings字符串向量的初始化向量的编译时间
【发布时间】:2014-06-30 17:01:20
【问题描述】:

我正在尝试一个 C++ 程序,其中我已将 2D 向量初始化为字符串。向量很大。

vector< vector <string> InVector ={ {"Alpha1","Beta1","10.23","13.20"},
                                    {"Alpha2","Beta2","30.23","13.20"},
                                      ..
                                     .. 
                                   };

向量 InVector 很大——在我的例子中是 1000x4。

当我编译程序时,编译时间太长了;但是,如果没有固定的向量初始化,它的编译速度非常快。使用 -O2 或 O3 优化时间太多了。

这是 -ftime-report 的输出

总计:79.02 0.67 80.53
314571 KB

知道如何改进编译时间。

我应该将它初始化为数组,然后将其转换为向量吗?或者有没有其他方法可以替代这种方法。

PS:如果我从文件中读取此向量,则没有问题。

【问题讨论】:

  • 请记住:编译是您只执行一次(或者无论如何很少)的事情,但您将多次运行程序(可能)。如果将编译时间加起来,与运行时初始化所用的时间相比,你认为哪个会更多?大多数情况下的答案是,运行时的初始化在几次之后将是最大的。长编译时间比长运行时更好。
  • 如果您专门禁用此编译单元的优化会发生什么?
  • 您使用的是哪个确切的编译器和版本?在哪个系统上?
  • 为什么要将大量数据硬编码到可执行文件中?从文件中读取它是一件轻而易举的事。请记住,“常量不是,变量不会”。
  • 如果我的程序需要多花 2 分钟才能启动(基于“5 次”评论),我很乐意换取 10 分钟的额外编译时间。一个建议:把这个数据结构放在一个你很少编译的文件中,也许是一个编译单元,所以它只影响从头开始构建,而不是你的增量构建。

标签: c++ vector


【解决方案1】:

我能想到两个选择,可能还有其他的:

  • 初始化一个静态数组,然后从中初始化向量。
  • 继续使用向量初始化,但将其单独放在一个文件中,以便仅在您进行完整项目构建或更改数据时重新编译。如果您经常更改数据,则不应将它们硬编码到程序中,而应作为资源或数据文件提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 2011-05-15
    • 2018-09-07
    • 2018-10-03
    • 2011-03-04
    • 2011-05-18
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多