<iostream>と<stdio.h>の速度比較

最近c++を始めてくれたtokaido君のためにiostreamの速度を測ってみた。
とりあえず、計測用のファイルを書き出します

#include
int main()
{
for(int i=0;i<100000;i++)
{
printf("%d\n",i%100);
}
}

これを

$ ./a.exe > input.txt

でinput.txtに書き出す。
1 2 3 4 ・・・ 100 1 2 3 ・・・ってかんじで10万個の数字を並べます
これを全部読み込んで速度を測るわけです
まずはを使った方法

#include
int main()
{
int tmp;
for(int i=0;i<100000;i++)
{
scanf("%d",&tmp);
}
}

tmpに読み込んでそのまま捨てる。簡単ですね
つぎはをつかった方法

#include
using namespace std;
int main()
{
int tmp;
for(int i=0;i<100000;i++)
{
cin >> tmp;
}
}

&が要らないってのはiostreamの良いところだなぁ
とりあえずこの2つを比べます
時間を計る方法は

$ time ./a.exe < input.txt

プログラムの前にtimeをつけるだけです

real 0m0.132s
user 0m0.124s
sys 0m0.031s

こんなのが出てきますが、とりあえずreal時間を見れば良いと思います
で、はかってみたら、こうなりました

stdio.h の場合:real 0m0.132s
iostreamの場合:real 0m3.424s

stdio.hはコンマ1秒なのに対しiostreamは3.4秒かかってるんですねー
これは遅い
というわけでstdio.h、scanfをつかいましょーというお話でした

ちなみに、JOIでfreopenという関数を知りました

freopen("input.txt","r",stdin);

でinput.txtが標準入力に結びつけられて、scanfからinput.txtの中身が読めるようになると。
outputも、

freopen("output.txt","w",stdout);

ってやればprintfでoutput.txtに書き出されるらしい。
便利便利。