output integers
入力関数に引き続き、出力関数を自作してみました。
非負整数の出力に特化しています。型の拡張(unsigned や long long)とか符号拡張は容易。
// 10進表記で出力し改行 void puti(int n) { if (!n) { fwrite("0\n", 1, 2, stdout); return; } char str[11]; str[10] = '\n'; int i = 10; while (n) { int m = n/10; str[--i] = '0' + n-m*10; n = m; } fwrite(str+i, 1, 11-i, stdout); }
出力方法はいろいろ試したのですが、
fwrite() を使うのがもっとも高速になりました。
cout, printf と比較します。
100000個の整数を出力させた結果はおおよそ次のようになりました。
# cout << table[i] << endl;
real 0m0.129s
user 0m0.100s
sys 0m0.100s
# printf("%d\n", table[i]);
real 0m0.056s
user 0m0.070s
sys 0m0.000s
# puti(table[i]);
real 0m0.040s
user 0m0.050s
sys 0m0.000s
やっぱ printf/scanf はかなり速いんですね。
さらなる最適化のヒントがあれば教えて頂けると幸いです:-)