#define getcx getchar_unlocked
inline void inp(int &n)//fast input function
{
n=0;
int ch=getcx();int sign=1;
while(ch < '0' || ch > '9'){if(ch=='-')sign=-1; ch=getcx();}
while( ch >= '0' && ch <= '9')
n = (n<<3)+(n<<1) + ch-'0', ch=getcx();
n=n*sign;
}
こんにちは私は上記の関数をさまざまなコーディングコンテストで使用していましたが、なぜそれが速いのか理解できませんでした。私はその論理を知っていますが、堅牢さの概念を知らないのです。たとえば、この行は "#define getcx getchar_unlocked"を実行しています。また、私は#define
がgetcx
が非ロック文字読み取り機能である機能getchar_unlocked()
、ために短い手可能にするためにプリプロセッサを使用していますので、任意の高速出力機能もある高速入力出力機能
このトピックに関する別の質問があります:http://stackoverflow.com/questions/9052757/getchar-unlocked-vs-scanf-vs-cin –
関数名はスレッドセーフではないことを示しているので、スレッドセーフです同期メカニズムを使用した入力機能は、これと比較してかなりのパフォーマンスオーバーヘッドを持つ可能性があります。 –
ひどくぎっしりしたコードの書式設定で判断すると、正しく書かれた関数よりも書いたほうが速いと推測しています。したがって、「速い」です。 – Lundin