【发布时间】:2014-03-20 08:31:15
【问题描述】:
我们可以使用 getchar_unlocked 来从标准输入快速读取整数,方法是操作如下字符:
int scan_d()
{
int ip = getchar_unlocked(), ret = 0, flag = 1;
for(; ip < '0' || ip > '9'; ip = getchar_unlocked())
{
if(ip == '-')
{
flag = -1;
ip = getchar_unlocked();
break;
}
}
for(; ip >= '0'&& ip <= '9'; ip = getchar_unlocked())
ret = ret * 10 + ip - '0';
return flag * ret;
}
有没有办法使用上面的方法快速从标准输入读取字符串? get 比 cin/scanf 快,但同时拥有对空格的关键处理。我想修改上面的字符串代码,但遇到了空格问题。此外,似乎一个一个地读取字符串的每个字符会更慢。
标准输入是指用户输入的字符串(无文件处理)
【问题讨论】:
-
这有过早优化的味道。
-
getchar_unlocked看起来也是一个非标准函数。 -
c++ 中没有类似
getchar_unlocked()的方法,你在说什么? -
@πάνταῥεῖ 因为他指的是
getchar_unlocked(),我猜这意味着它是getchar的版本,没有同步。std::cin必须跨线程同步,并且默认与 cstdio 同步。当您添加每个字符的虚拟调用开销时,使用std::cin的哪种方法并不重要,它们都会比getchar_unlocked慢。 OTOH,这纯粹是过早的优化。 -
"有没有办法使用类似上面的方法快速从标准输入读取字符串?" 并且由于 "我的意思是标准输入是由用户(无文件处理)”,答案很明确:以更快的用户。 ;)