#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" 。另外我不知道任何快速输出功能,所以也有任何快速输出功能
getchar_unlocked() http://linux.about.com/library/cmd/blcmdl3_getchar_unlocked.htm是线程unsafe的版本getchar()
原因是getchar_unlocked()
seems更快的是它不会检查输入流上应该获取字符的任何锁定。因此,如果另一个线程锁定了输入流,则该线程应该等到锁计数为零 http://linux.about.com/library/cmd/blcmdl3_flockfile.htm。但这个函数并不关心它,从而破坏了线程之间的同步。
但如果您确定缺乏同步不会对您造成伤害,那么此功能可能会帮助您更快一点。
另外,其advised http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=/com.qnx.doc.neutrino_lib_ref/g/getchar_unlocked.html仅当调用线程已使用以下命令锁定 stdin 时,您才能安全地使用它羊群文件() http://linux.about.com/library/cmd/blcmdl3_flockfile.htm (or ftrylockfile()
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)