【问题标题】:Competitive programming header file竞技编程头文件
【发布时间】:2014-08-13 16:32:36
【问题描述】:

在 Halim 兄弟的“Competitive Programming 3”一书中,指出最好将所有宏、包含和 typedef 插入一个名为“competitive.h”的单独文件中。然后,您所要做的就是在开始编码时包含“competitive.h”。正如我所看到的,这可以在我的机器上运行,但由于我一次只能向法官提交 1 个文件,所以它不会在那里工作。 有什么办法可以在 C++ 中做到这一点?

谢谢。

【问题讨论】:

  • 一个文件还是一个翻译单元?如果后者成立,你会没事的
  • #include <bits/stdc++.h> 在这里值得一提。查一下。
  • @Marco A.:我从未听说过,但如果我能以某种方式将翻译单元作为文件获取,我的问题似乎将得到解决。有没有办法做到这一点?
  • @axiom:是的,我坚持这样做,但我也希望我的宏、类型定义和函数也一样。

标签: c++


【解决方案1】:

我认为这不是一个好方法。 gcc -E 有时会输出一个非常大的文件并且相当混乱。您应该找到一个支持插入骨架代码的体面的文本编辑器。以下是使用 Vim 的方法:

使用编辑器的一种“折叠”功能隐藏骨架部分可能会很好。

我认为 Emacs 支持它们。不知道 Sublime。

#include 方法不灵活,因为您不能轻易地修改公共文件中的某些部分代码,专门针对其中一个问题集。

【讨论】:

  • 任何编辑器都可以通过以下简单方法使用模板: (1) 打开模板。 (2) “另存为”新文件名。
  • 这就是我一直在用 Sublime Text 做的事情。我只是想知道因为这本书。
  • 使用 Sublime Text,你可以玩 sn-ps。例如,这允许浏览需要使用每个新文件自定义的一些字段。这就是我为 LaTeX 所做的,然后我可以通过文件名进行选项卡,我想要一个标题页,这样的事情......还有像 FileHeader 这样的包可能可以修改为你想要的。
  • ST2 似乎唯一不能做的就是自动折叠 sn-p 的顶部。
【解决方案2】:

只需通过 c 预处理器运行您的 c++ 文件,使用:

cpp myfile.cpp > myfileprocessed.cpp

将任何包含的标题直接嵌入到文件中。

编辑:

抱歉,刚刚注意到同时发布了另一个类似的答案,请将其留在这里,因为它突出了调用预处理器的两种方式。

【讨论】:

  • 这可能适用于一个特定的编译器,具体取决于它的安装方式,但这不是一个通用的解决方案。 (更不用说提交预处理的输出无论如何都行不通。)
【解决方案3】:
#include<bits/stdc++.h>

此头文件包括最常用的头文件。但它有点慢,因为它包含很多头文件。

在竞技编程中,为了简单起见,我一般使用这个头文件。
但是为了更快的 IO 你可以添加代码。

ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ;

【讨论】:

    【解决方案4】:

    我会做一个

    #ifdef LOCAL
    #include "competitive.h"
    #else
    #include <bits/stdc++.h>
    #endif
    

    这样,它只在你的本地机器上运行

    #include "competitive.h"
    

    请务必添加

    -DLOCAL
    

    到你的编译器标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-05
      • 2015-10-08
      • 2011-05-20
      • 2012-03-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多