I/O速度の高速化


📜 n/a.ターゲット
c++でI/O速度を速めましょう.
💡 に質問
通常、cinとcoutはc言語のscanf、printfよりずっと遅い.通常問題は発生しませんが、解題などの場合はI/O速度が非常に重要なので、より速い速度で処理する必要があります.
▼▼▼解決策
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
上記2行を追加することで、I/O速度を速めることができます.
1. ios_base::sync_with_stdio(false)
この構文は、CとC++間の標準入出力の同期を解除します.基本的に、C++はCとC++の間のI/Oを混合して使用することができる.これらのI/Oバッファを同期して予測可能な出力にするというオプションを使用して、両言語にそれぞれのバッファがあるため、どちらが先に出力されるか予測できないが、速度は速くなる.つまり、上記のオプションではC++のI/Oしか使用できません.
  • cin.tie(nullptr), cout.tie(nullptr)
    基本的にcinはcoutに縛られている.バンドルされたI/Oは、互いに開始する前にバッファを空にします.そのため、プレイヤーとのインタラクションを保障することは、私たちが解決しなければならない問題の中で重要ではありません.このため、緩めることで速度を上げることができる.このとき注意すべき点は,各入出力が互いに交差すると,プレイヤーには見えない可能性があることである.△問題の解き方に全く影響がない.
  • 💻 サンプルコード
    #include <iostream>
    
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        int T;
        cin >> T;
        cout << "Hello " << T << '\n';
    }
    🤔 参考資料
    https://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull
    https://eine.tistory.com/entry/CC-I/O-メソッド-速度-クリア