17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【競プロ向け】bits/stdc++.hをプリコンパイルしてコンパイルを高速化しよう

Posted at

はじめに

C++で競技プログラミングをする人はよく使うであろう「#include<bits/stdc++.h>」ですが、これを使用するとコンパイルに少し時間がかかるようになります。この問題は、ヘッダファイルをあらかじめコンパイルしておくことで解決することができます。具体的には、約2秒かかっていたコンパイルが約0.5秒で終わるようになりました。
なお、この記事よりも

の方がよりシンプルです。まずはこちらを読んだ方がいいかもしれません。

前提

基本的なC++の環境構築は出来ているものとします。具体的には、#include<bits/stdc++.h>を使用したコードが正常にコンパイルして実行できる状態です。

手順

bits/stdc++.hを探す

bits/stdc++.hがどこにあるかを探します。WSLを使用している場合、「/usr/include/x86_64-linux-gnu/c++/11/bits」にあると思います。
見つからなければ、以下の記事を参考に探しましょう。

bitsディレクトリに移動

cdコマンドなどを使用してbitsディレクトリに移動しましょう。

cd /usr/include/x86_64-linux-gnu/c++/11/bits

stdc++.hをプリコンパイルする

普段使っているオプションをつけて、stdc++.hをプリコンパイルします。

sudo g++ (普段使っているオプション) stdc++.h

例えば、筆者は普段

g++ -o ! testfile.cpp -D BLUEBERRY -Wall -I /home/blueberry/atcoder_codespace/ac-library-master/

でコンパイルしていますので、

sudo g++ -D BLUEBERRY -Wall -I /home/blueberry/atcoder_codespace/ac-library-master/ stdc++.h

となります。sudoが必要なことに注意です。
なお、このやり方では一つのコンパイルオプションにしか対応できませんが、複数のコンパイルオプションに対応することもできます。以下の記事が参考になると思います。

動作確認

ここからは、普段使っているディレクトリに戻って大丈夫です。普段と同じようにコンパイルして、コンパイルが速くなっているかを確かめましょう。きちんと確かめたい場合、-Hオプションを付けることで、どこからincludeされているかを調べることができます。

手順は以上となります。

注意点

include<bits/stdc++.h>はファイルの先頭に書きましょう。 筆者が詰まった原因はここでした。using namespace stdなどをincludeよりも上に書いていると正常に動作しません。
うまくincludeされない場合、includeが一番最初に入っていないか、コンパイルオプションが間違っている(ヘッダファイルのプリコンパイル時のオプションと一致していない)可能性が高いです。

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?