inline void fastRead(int *a)
{
register char c=0;
while (c<33) c=getchar_unlocked();
*a=0;
while (c>33)
{
*a=*a*10+c-'0';
c=getchar_unlocked();
}
}
上面的代码执行速度比c中的标准scanf()快 和cin在c ++?它是如何执行的?
答案 0 :(得分:1)
此代码不是将输入转换为整数的正确尝试。
// converts input to integer, result will be in *a.
// there are a little chances that function with to while loops will be inlined.
// also "int fastRead()" would be at least not slower than void fastRead(int*)
inline void fastRead(int *a)
{
register char c=0;
// characters with ascii codes from 0 to 31 is control characters
// 32 is space. So this line just skips anything what control or space
while (c<33) c=getchar_unlocked();
*a=0; // assign 0 to result
while (c>33)
{
// if read character is digit ('0'-'9') then c-'0' will return a number
// from 0 to 9, if it not the result of calculation will be wrong
*a=*a*10+c-'0';
c=getchar_unlocked();
}
}
即使速度非常快,我也不会在生产中使用这些代码。因为每个人都可以创建快速但错误的程序:)