2013-06-22 125 views
-3

有人可以解释这个快速输入背后的逻辑吗?我知道它比scanf快。快速输入后面的逻辑

int scan() 
{ 
    int ip=getchar_unlocked(),ret=0; 
     for(;ip<'0'||ip>'9';ip=getchar_unlocked()); 

     for(;ip>='0'&&ip<='9';ip=getchar_unlocked()) 
      ret=ret*10+ip-'0'; 
    return ret; 
} 
+4

你不了解什么? –

+0

明白了Vaughn Cato !! Thanx .. – JayPatel

回答

3

这里的unlocked部分是为了避免锁定所述输入文件(从而潜在地引起问题,如果多个线程从相同的输入读数)。

与其他使用getchar的收益相比,这可能是90%的收益,而这反过来可能只会略微好于scanf。很明显,scanf在解析格式字符串时也有开销,这可能会带来一些开销。

其余代码只是“跳过不是数字的任何东西”,然后将一个十进制数字读入ret,当数字是非数字时停止。

为了读取的输入广大,I(如果系统是已知的,以支持那些呼叫中的一个或mmapMapViewoOfFile)加载了大量的输入数据在缓冲器中会建议使用fread,然后用一基于指针的方法来“跳过非数字”(假设这是一个“安全”的事情)。很有可能这比上面的代码更快。

+0

是啊// @Mats Petersson..Thanx的回复 – JayPatel